本文主要介绍用json_encode时中文无法转换的解决方案,本文假设文件所用的编码为gb2312;
先写出所需的数组:
<?php
$json=array(
0=>
array(
'id'=>'13',
'name'=>'乒乓球',
),
1=>
array(
'id'=>'17',
'name'=>'篮球',
)
)
?>
如果直接用PHPjson_encode函数
<?php
echo json_encode($json);
?>
结果为:[{"id":"13","name":null},{"id":"13","name":null}]
可以看到汉字没有被转义都为null,这是因为json仅仅转义encoding编码(类似于:%B0%AE),故上面语句应该先转换编码:
<?php
foreach($ajaxas$key=>$val){
$ajax[$key]['name']=urlencode($val['name']);
}
echo json_encode($json);
?>
客户端js代码:
<scripttype="text/javascript">
functiongetsort(obj){
$.ajax({
type:"GET",
baseUrl;?>/index/getajax">url:"<?=$this->baseUrl;?>/index/getajax",
data:"c="obj.value,
success:function(json){
varjson=eval(json);
varhtml='<select>';
$.each(json,function(k){
html='<optionvalue="'+json[k]['id']+'">'+decodeURI(json[k]['name'])+'</option>';
});
html="</select>";
$('#sort').html(html);
}
})
}
</script>
用上面的代码js会报错说编码不符合标准
原因是因为js中decodeURI仅支持utf-8转码。所以PHPjson_encode函数的代码应该为下面的代码:
<?php
foreach($ajaxas$key=>$val){
$ajax[$key]['name']=urlencode(iconv('gb2312','utf-8',$val['name']));//iconv扩展函数库默认没有安装,需要安装它才能使用
}
echojson_encode($json);
?>