PHP json_encode中文乱码怎么解决
墨初 编程开发 1703阅读
在php脚本中,在使用 json_encode() 函数将含有中文字符串的数组转换成 json 格式的字符串时,其数组内的中文会被转义出现一些乱码,如果出现这种情,不要着急,因为这并不是 json_encode() 函数的BUG,也不是你代码有问题,而需要我们对 json_encode() 函数运行时进行一些设置,就可以保持中文字符串以正常的状态进行转换了!
json_encode中文乱码的解决方法
json_encode() 原始输出:
可以参考下面的代码,数组中的“墨初”两个字在通过 json_encode() 函数转成 json 格式的字符串后,被转成了“\u58a8\u521d”!
$arr = array('墨初','73so.com'); echo json_encode($arr); // ["\u58a8\u521d","73so.com"]
方法1:
在json_encode() 函数添加第二个参数,参数值为 JSON_UNESCAPED_UNICODE
注:此方法适合网站服务器 php 版本大于 5.4 的网站,如果低于这个版本,就不要考虑了。
$arr = array('墨初','73so.com'); echo json_encode($arr,JSON_UNESCAPED_UNICODE); // ["墨初","73so.com"]
方法2:
利用 urlencode 与 urldecode 函数来保持 json_encode 函数转换后的数据保持中文状态。
//73so.com $arr = array('墨初','73so.com'); foreach( $arr as $key => $v ) { $arr[$key] = urlencode ($v); } echo urldecode(json_encode($arr)); // ["墨初","73so.com"]
PS:
1、如果你服务器的PHP版本低于5.5,请不要使用方法1,不然 json_encode() 函数会抛出错误
2、方法2在低版本的php中也可以使用,但更推荐您升级php版本来使用方法1