PHP json_encode 中文转义要怎么关闭
发布:smiling 来源: PHP粉丝网 添加日期:2026-10-23 14:25:22 浏览: 评论:0
PHP默认将中文转义为uXXXX,添加JSON_UNESCAPED_UNICODE选项即可输出原始中文,但需确保PHP≥5.4且数据为UTF-8编码。
PHP 的 json_encode 默认会对中文字符进行 Unicode 转义(如 "u4f60u597d"),这是为了确保 JSON 字符串在各种环境下的兼容性。但如果你希望输出可读的原始中文(如 "你好"),可以通过添加 JSON_UNESCAPED_UNICODE 选项来关闭转义。
使用 JSON_UNESCAPED_UNICODE 选项
这是最直接、推荐的方式。该常量告诉 json_encode 不要将多字节 UTF-8 字符(包括中文)转义为 uXXXX 形式:
PHP 5.4.0 及以上版本支持该常量
必须确保传入的数据是 UTF-8 编码,否则可能出错或显示乱码
可以与其他 JSON 选项组合使用,例如 JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES
示例:
- <?php
- $data = ['name' => '张三', 'msg' => '你好,世界!'];
- $json = json_encode($data, JSON_UNESCAPED_UNICODE);
- echo $json;
- // 输出:{"name":"张三","msg":"你好,世界!"}
- ?>
检查并确保输入数据是 UTF-8 编码
即使加了 JSON_UNESCAPED_UNICODE,如果原始字符串不是 UTF-8 编码,结果仍可能异常(如乱码或转义失败):
数据库连接需设为 UTF-8(如 MySQL 使用 SET NAMES utf8mb4 或 PDO DSN 中指定 charset=utf8mb4)
PHP 文件本身应保存为 UTF-8 无 BOM 格式
从 GET/POST 或文件读取的字符串,可用 mb_convert_encoding($str, 'UTF-8', 'GBK') 做转换(根据实际源编码调整)
兼容旧版 PHP(低于 5.4.0)的替代方案
若无法升级 PHP,可借助 preg_replace 对已生成的 JSON 进行后处理(不推荐,仅作兜底):
先用 json_encode 得到含 uXXXX 的字符串
用正则匹配 Unicode 码点并还原为 UTF-8 字符,例如:
preg_replace_callback('/\\u([0-9a-f]{4})/i', function ($m) { return mb_convert_encoding(pack('H*', $m[1]), 'UTF-8', 'UCS-2BE'); }, $json);
注意:此方法有性能开销,且对混合编码或非法码点容错性差
常见误区提醒
有些开发者尝试用 urldecode、iconv 或手动替换 u,这些方式大多无效或引发新问题:
JSON_UNESCAPED_UNICODE 是唯一官方、安全、高效的解决方案
不要在 json_encode 后再用 stripslashes 或类似函数——它不会还原 Unicode 转义,反而可能破坏合法反斜杠
浏览器或调试工具显示 uXXXX 并不意味着数据错误,JSON 解析器会自动还原,只是可读性差
Tags: PHP中文转义 json_encode中文转义
- 上一篇:PHP8.5怎么配置数据库事务回滚
- 下一篇:最后一页
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)
