php输出使用json_encode函数生成的json数据的时候,发现数据中的中文被转义成了unicode编码,如果使用ajax请求的json数据还好一点,浏览器会自动将unicode编码转义回来,但如果直接输出到浏览器上,那就会直接输出 unicode 编码,影响阅读体验。

解决php json_encode函数中文被转义的方法

这篇博文不考虑页面编码的问题,只从 json_encode 函数上来解决中文被 unicode 编码的问题,大家可以做个参考。

方法1:

此方法适用于php版本大于5.4情况下,如果php版本低于5.4可参考方法2

设置 json_encode 第二个参数为 JSON_UNESCAPED_UNICODE,则 json_encode 输入带的中文的数据时,中文不会被编码

例:

//feiniaomy.com 飞鸟慕鱼博客
$arr = array('code' => 'success','msg' => '这里是一个提示的内容');
echo json_encode($arr);
//输出的JSON: {"code":"success","msg":"\u8fd9\u91cc\u662f\u4e00\u4e2a\u63d0\u793a\u7684\u5185\u5bb9"}
echo json_encode($arr,JSON_UNESCAPED_UNICODE); // 将第二个参数设置为:JSON_UNESCAPED_UNICODE
//输出的JSON:{"code":"success","msg":"这里是一个提示的内容"}

方法2:

低于 5.4 版本的php中,json_encode 函数的第二个参数不起作用,则需要自己定义函数来实现不转义汉字的方法。

例:

$arr = array('Name' => '墨初','Host' => 'http://feiniaomy.com');
//需要判断一个php的版本
if(version_compare(PHP_VERSION,'5.4.0','<')) {
    foreach($arr as $key => $value){  
    $jsonstr[$key] = urlencode($value);
    }
    echo urldecode(json_encode($jsonstr));
}else{
    echo json_encode($arr);
}