
PHP 默认将非 ASCII Unicode 字符转义为 \uXXXX 形式,使用 JSON_UNESCAPED_UNICODE 标志可强制输出原始 UTF-8 字节,避免中文、阿拉伯文等显示为十六进制转义序列。
php 默认将非 ascii unicode 字符转义为 `\uxxxx` 形式,使用 `json_unescaped_unicode` 标志可强制输出原始 utf-8 字节,避免中文、阿拉伯文等显示为十六进制转义序列。
在 PHP 中,json_encode() 函数默认会对 Unicode 字符(如中文、波斯文、阿拉伯文等)进行转义处理,将其转换为形如 \u0645\u0631\u062a\u0636\u06cc 的 JSON Unicode 转义序列。这种行为虽符合 JSON 规范,但在现代 Web 开发中往往不必要——尤其当后端与前端均明确采用 UTF-8 编码时,直接输出可读的 UTF-8 字节更简洁、高效,也利于调试和日志可读性。
解决方法非常简洁:启用 JSON_UNESCAPED_UNICODE 标志即可:
<?php $text = "مرتضی"; // 波斯语姓名(UTF-8 编码) $json = json_encode($text, JSON_UNESCAPED_UNICODE); echo $json; // 输出: "مرتضی"(原生 UTF-8 字符串) ?>
对比默认行为:
<?php $text = "مرتضی"; echo json_encode($text); // 输出: "\u0645\u0631\u062a\u0636\u06cc"(转义形式) echo json_encode($text, JSON_UNESCAPED_UNICODE); // 输出: "مرتضی"(原始 UTF-8) ?>
✅ 关键注意事项:
立即学习“PHP免费学习笔记(深入)”;
- 该标志仅影响 Unicode 字符的编码方式,不影响 JSON 结构或安全性;
- 必须确保 PHP 运行环境(脚本文件、数据库连接、HTTP 响应头)统一使用 UTF-8 编码,否则可能引发乱码;
- 推荐配合设置响应头以显式声明编码:
header('Content-Type: application/json; charset=utf-8'); - 若需兼容旧版 PHP(
总结:JSON_UNESCAPED_UNICODE 是解决 json_encode() 不必要 Unicode 转义的标准、轻量且无副作用的方案。它不改变数据语义,仅优化字符串表现形式,是构建现代化、国际化 API 的必备实践之一。










