什么是PHP中的JSON编码
JSON是JavaScript对象表示法的缩写。在编写JavaScript代码时,您可以在JavaScript中编写JSON格式的数据,并且可以轻松地将其传输给远程服务器。 PHP 提供了一个功能强大的内置函数json_encode(),该函数可以将PHP数组和对象转换为JSON格式,使其可以在web应用程序中交换数据。 PHP json_encode() 函数是从PHP 5.2.0版本开始提供的。
JSON编码中中文乱码问题的解决
PHP的json_encode方法可以将数组、对象转换为JSON格式的字符串,但是如果数组或对象中存在中文,则json_encode方法会将中文进行Unicode编码,导致中文在传输过程中变为一堆Unicode码,即中文编码的问题。
如下示例:
$arr = array('name' => '张三', 'age' => 18, 'gender' => '男');
echo json_encode($arr);
//输出结果:{"name":"\u5f20\u4e09","age":18,"gender":"\u7537"}
对于中文字符,json_encode() 转义了每个字节,所以输出为 \u5f20\u4e09。
解决方法一:使用JSON_UNESCAPED_UNICODE选项
PHP 5.4.0及以上版本中提供了JSON_UNESCAPED_UNICODE选项,如果将这个选项加入到json_encode()函数的第二个参数中,那么中文字符就不会被编码了。
$arr = array('name' => '张三', 'age' => 18, 'gender' => '男');
echo json_encode($arr,JSON_UNESCAPED_UNICODE);
//输出结果:{"name":"张三","age":18,"gender":"男"}
这样输出的结果就没有Unicode编码,中文直接输出。
解决方法二:手动转义中文字符
如果您的PHP版本不支持JSON_UNESCAPED_UNICODE选项,或者您不想升级PHP版本,那么您可以手动将中文字符转义。
$arr = array('name' => '张三', 'age' => 18, 'gender' => '男');
$new_arr = array();//新建一个数组
foreach($arr as $key => $value)
{
$new_arr[$key] = urlencode($value);//手动转义中文字符
}
echo urldecode(json_encode($new_arr));
//输出结果:{"name":"张三","age":18,"gender":"男"}
通过urlencode()函数手动转义中文字符,然后再通过urldecode()函数进行解码即可。
总结
以上两种方法都可以解决PHP中json_encode()输出中文乱码的问题,可以根据不同的PHP版本和需求选择不同的方法。