一、问题背景: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() 默认行为是:
- 将非 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
相关文章
本文暂时没有评论,来添加一个吧(●'◡'●)
