php 的 json_encode() 默认将中文转为 unicode,需传入 json_unescaped_unicode 选项才能输出原始中文;该选项自 php 5.4.0 起可用,且要求输入数据为 utf-8 编码。

PHP 的 json_encode() 默认会对中文字符进行 Unicode 转义(如 "\u4f60\u597d"),这是符合 JSON 规范的,但有时你希望输出可读的原始中文(如 "你好")。解决方法很简单:使用 JSON_UNESCAPED_UNICODE 选项。
添加 JSON_UNESCAPED_UNICODE 选项
这是最直接、推荐的方式。在调用 json_encode() 时,将该常量作为第二个参数传入:
json_encode($data, JSON_UNESCAPED_UNICODE)- 如果还希望美化输出,可叠加
JSON_PRETTY_PRINT:json_encode($data, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT)
注意 PHP 版本兼容性
JSON_UNESCAPED_UNICODE 自 PHP 5.4.0 起可用。如果你使用的是更老版本(如 5.3),需手动替换或升级 PHP。不建议用 str_replace() 或正则“解码” Unicode,容易出错且破坏 JSON 结构。
确保数据本身是 UTF-8 编码
json_encode() 要求输入字符串为 UTF-8。如果源数据来自数据库、文件或表单,且编码不是 UTF-8(例如 GBK),需先转换:
- 用
mb_convert_encoding($str, 'UTF-8', 'GBK')转换 - 或用
iconv('GBK', 'UTF-8//IGNORE', $str) - 检查是否转换成功:
mb_check_encoding($str, 'UTF-8')应返回true
常见误区提醒
不要尝试用 stripslashes() 或 urldecode() 处理 json_encode() 输出——它们不适用,且可能损坏 JSON。也不要依赖 header('Content-Type: application/json; charset=utf-8') 来“修复”转义,这个 header 只影响浏览器解析编码,不改变 JSON 字符串内容本身。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











