php json如何使得中文不编码

什么是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版本和需求选择不同的方法。

后端开发标签