问题描述:在PHP中,有时候使用json_encode函数生成的JSON字符串中,中文会出现乱码,这给数据处理和展示带来了很大的不便。那么,该如何解决这个问题呢?
解决方法:
- 设置json_encode函数中文编码格式
PHP默认的编码格式为ISO-8859-1,而JSON字符串的默认编码格式为UTF-8,所以需要手动设置编码格式。可以使用json_encode函数的第二个参数$options进行设置。
$options参数中有个选项是JSON_UNESCAPED_UNICODE,可以把中文转换成Unicode编码,以避免出现乱码。代码如下:
$str = '这是中文';
echo json_encode($str, JSON_UNESCAPED_UNICODE);
输出结果:
"这是中文"
需要注意的是,这个方法只适用于PHP 5.4及以上版本。
- 修改PHP配置文件
如果以上方法还是不能解决问题,可以尝试修改PHP配置文件php.ini中的default_charset选项。把它设置成UTF-8,可以保证生成的JSON字符串中的中文不会乱码。代码如下:
default_charset = "UTF-8"
示例1:
下面是一个使用json_encode函数生成JSON字符串,并将其打印出来的示例。代码如下:
$arr = array(
'name' => '张三',
'age' => 18,
'sex' => '男',
'hobby' => array('跑步', '爬山', '看电影')
);
echo json_encode($arr);
输出结果:
{"name":"\u5f20\u4e09","age":18,"sex":"\u7537","hobby":["\u8dd1\u6b65","\u722c\u5c71","\u770b\u7535\u5f71"]}
可以发现,中文字符被转换成了Unicode编码。这时候就需要使用JSON_UNESCAPED_UNICODE选项,将其中文字符转换成原来的字符。代码如下:
echo json_encode($arr, JSON_UNESCAPED_UNICODE);
输出结果:
{"name":"张三","age":18,"sex":"男","hobby":["跑步","爬山","看电影"]}
示例2:
下面是一个使用修改PHP配置文件的方法解决中文乱码问题的示例。代码如下:
// 修改php.ini文件
ini_set('default_charset', 'UTF-8');
// 生成JSON字符串
$arr = array(
'name' => '王五',
'age' => 20,
'sex' => '男',
'hobby' => array('跳舞', '唱歌', '打游戏')
);
echo json_encode($arr);
输出结果:
{"name":"王五","age":20,"sex":"男","hobby":["跳舞","唱歌","打游戏"]}
可以看到,JSON字符串中的中文已经正常显示了。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php中json_encode UTF-8中文乱码的更好解决方法 - Python技术站