PHP中json_encode避免出现unicode编码-解决方案
2018-06-22| 程成| 1519| 0| PHP技术

PHP中,我们在使用 json_encode 时,如果数据中出现中文,中文会被转换成 unicode 编码。如下面这种


<?php
date_default_timezone_set('Asia/Shanghai');
$array = array('这是测试的中文','this is english');
echo json_encode($array);


输出结果为:


["这是测试的中文","this is english"]



这种结果是正确的,也很常见;并且在 javascript 中是可以正常解析的。但是,我们有时候并不需要 unicode 编码,比如数据库的可见性。这个时候也可以实现,解决方法是,在 json_encode 之前,对中文进行 urlencode(),然后再进行转 json,最后将 json 进行 urldecode() 转换回来就可以。


<?php
date_default_timezone_set('Asia/Shanghai');
$array = array('这是测试的中文','this is english');
$data = array();
foreach($array as $k => $v){
$data[] = urlencode($v);
}
echo urldecode(json_encode($data));


输出结果如下:


["这是测试的中文","this is english"]


这样,我们的问题也就解决了,常见的有天气预报的接口返回值就是这样的。需要我们注意的是 json_encode()只支持UTF-8编码。所以如果是其它编码的时候还需要转换一下。如:iconv(),当然方法也很多了,在PHP5.4的版本中 json_encode()已经支持不转换编码,例:json_encode($str, JSON_UNESCAPED_UNICODE)


通过以上方法,就可以避免 json_encode()中出现unicode编码。




×
作者:程成
QQ:492245711