PHP json_encode() 编码中文出现乱码,如何解决?

PHP json_encode() 编码中文出现乱码,如何解决?
最新回答
甜心猫宠女

2021-08-26 19:36:26

PHP的json_encode()函数默认会将中文字符转换为Unicode转义序列(如u6211),而非直接输出中文字符,这可能导致显示乱码。

解决方法:
  1. 使用JSON_UNESCAPED_UNICODE选项在调用json_encode()时,添加JSON_UNESCAPED_UNICODE参数,强制直接输出中文字符:

    $json = json_encode($data, JSON_UNESCAPED_UNICODE);
  2. 确保编码一致性

    PHP文件编码:保存PHP文件为UTF-8无BOM格式(避免BOM头干扰)。

    数据库连接:若数据来自数据库,确保连接字符集为UTF-8(如MySQL的SET NAMES utf8mb4)。

    HTTP头设置:在输出JSON前设置正确的Content-Type:header('Content-Type: application/json; charset=utf-8');

  3. 前端处理如果JSON被前端JavaScript解析,确保使用JSON.parse()或直接处理响应(现代浏览器会自动处理Unicode转义)。

  4. 检查环境配置

    确认PHP的default_charset配置为UTF-8(在php.ini中设置)。

    避免在中间环节(如日志、文本编辑器)强制转换编码。

示例代码:// 示例数据$data = ["name" => "杨"];// 设置HTTP头header('Content-Type: application/json; charset=utf-8');// 编码为JSON(保留中文)echo json_encode($data, JSON_UNESCAPED_UNICODE);// 输出:{"name":"杨"}常见误区:
  • 误认为乱码是编码错误:实际上u6211是合法的JSON Unicode表示,问题通常出在显示环节未正确解码。
  • 忽略环境编码:若PHP文件或数据库连接非UTF-8,即使使用JSON_UNESCAPED_UNICODE也可能失败。

通过以上步骤,可确保JSON中的中文正常显示。