当前位置:首页 > PHP教程 > php应用 > 列表

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

示例:

  1. <?php 
  2.   $data = ['name' => '张三', 'msg' => '你好,世界!']; 
  3.   $json = json_encode($data, JSON_UNESCAPED_UNICODE); 
  4.   echo $json; 
  5.   // 输出:{"name":"张三","msg":"你好,世界!"} 
  6. ?> 

检查并确保输入数据是 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中文转义

分享到: