我们知道,用PHP的json_encode来处理中文的时候,中文会被unicode编码,类似\u*的格式。不可读且在一定程度上增加传输的数据量。
例如:
echo json_encode("中文"); //结果为:"\u4e2d\u658"
因为不可读,这对于开发过程中进行调试很是头疼。那么有没有解决的办法呢?
在PHP5.4,这个问题终于得到解决。json_encode新增了第二个参数:JSON_UNESCAPED_UNICODE,顾名思义,不要用unicode编码中文。
看下面的例子:
echo json_encode("中文", JSON_UNESCAPED_UNICODE); //结果为:"中文"
See?输出结果可读。但仍有一个疑问:PHP开发最经常用到JSON输出的情况是,来自前端AJAX的请求,而且jQuery的$.ajax方法解析json_encode($var)返回的结果非常流畅。那么现在实现了可读性结果输出,对jQuery的解析有没有影响呢?看下面的例子:
Js代码
$.ajax({
type: 'GET',
url: 'back.php',
success: function(xhr) {
document.write("key1:" + xhr.key1 + "<br>");
document.write("中文键:" + xhr.中文键 + "<br>");
},
dataType: 'JSON'
})
后端代码:
Php代码
$var = array(
'key1' => 'this is key',
'中文键' => '中文值',
'key2' => '中文abc'
);
echo json_encode($var, JSON_UNESCAPED_UNICODE);
输出结果:
key1:this is key
中文键:中文值
PERFECT!!!