PHP json_encode中文乱码问题解决:JSON_UNESCAPED_UNICODE正确用法详解

代码笔记2小时前发布
6 0 0

一、问题背景:json_encode 输出中文变成 \uXXXX

在使用 PHP 开发接口或工具时,很多人会遇到这样的问题:


$response = [
    "ret" => "ok",
    "lizhijuzi" => "人生没有白走的路,每一步都算数"
];

echo json_encode($response);

输出结果却变成了这样:


{"ret":"ok","lizhijuzi":"\u4eba\u751f\u6ca1\u6709\u767d\u8d70\u7684\u8def"}

很多开发者第一反应是:是不是乱码了?

其实并不是,这只是 JSON 的一种编码方式。

PHP json_encode中文乱码问题解决:JSON_UNESCAPED_UNICODE正确用法详解

PHP json_encode中文乱码问题解决

二、原因解析:为什么中文会被转义?

PHP 的 json_encode() 默认行为是:

  • 将非 ASCII 字符(如中文)转为 \uXXXX 格式
  • 这是符合 JSON 标准的(RFC 规范允许)
  • 目的是保证跨语言兼容性

例如:


"中文" → "\u4e2d\u6587"

这种格式在 JavaScript 中解析后仍然是正常中文:


JSON.parse('"\u4e2d\u6587"'); // 结果仍然是:中文

也就是说:数据没有问题,只是显示不友好

三、解决方案:JSON_UNESCAPED_UNICODE

如果你希望 JSON 直接输出中文,而不是 \uXXXX,可以这样写:


echo json_encode($response, JSON_UNESCAPED_UNICODE);

输出将变成:


{"ret":"ok","lizhijuzi":"人生没有白走的路,每一步都算数"}

这就是我们实际开发中更推荐的写法。

四、完整示例:随机励志句子 API

下面是一个完整的示例,读取 TXT 文件并返回随机一句话:


<?php

// 读取txt文件的内容
$lines = file("./juzi.txt", FILE_IGNORE_NEW_LINES);

// 随机选择一行
$random_line = $lines[array_rand($lines)];

// 构建JSON响应
$response = array(
    "ret" => "ok",
    "lizhijuzi" => $random_line
);

// 设置响应头
header('Content-Type: application/json; charset=utf-8');

// 输出JSON(关键点)
echo json_encode(
    $response,
    JSON_UNESCAPED_UNICODE
);

五、进阶优化:推荐组合写法

在实际开发中,建议使用以下组合:


echo json_encode(
    $response,
    JSON_UNESCAPED_UNICODE 
    | JSON_UNESCAPED_SLASHES 
    | JSON_PRETTY_PRINT
);

作用说明:

  • JSON_UNESCAPED_UNICODE:中文正常显示
  • JSON_UNESCAPED_SLASHES:URL 不转义
  • JSON_PRETTY_PRINT:格式化输出(方便调试)

六、常见问题排查

1、中文还是乱码?

可能原因:

  • TXT 文件不是 UTF-8 编码
  • 建议使用 UTF-8 无 BOM

2、浏览器显示乱码?

确保设置:


header('Content-Type: application/json; charset=utf-8');

3、不要用 str_replace 处理 JSON

错误写法:


str_replace('\u', '', json_encode($data));

这种方式会破坏 JSON 结构,属于严重错误。

七、适用场景

  • API 接口开发
  • 随机句子接口 / 文本接口
  • SEO 工具返回数据
  • 日志分析工具
  • 前后端数据交互

特别是在中文网站中,建议必须开启 JSON_UNESCAPED_UNICODE

八、总结

PHP 的 json_encode() 默认行为并不是错误,而是一种规范兼容策略。但在实际开发中:

  • 推荐开启 JSON_UNESCAPED_UNICODE
  • 保证输出更直观
  • 提升调试体验和用户体验

最终推荐写法:


echo json_encode(
    $data,
    JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT
);

这是目前最实用、最推荐的 JSON 输出方案。

© 原创声明:本文由 四六啦工具 于 2 小时 前发表在 代码笔记 分类目录中,最后更新于2026年4月6日,转载请注明本文永久链接:https://www.46.la/php-json-encode-unicode-fix

相关文章

暂无评论

本文暂时没有评论,来添加一个吧(●'◡'●)