You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在PHP中生成可被JavaScript解析的JSON对象需要处理哪些字符?

核心结论

PHP 内置的 json_encode 本身已经完全符合 JSON 规范,正常场景下不需要自行编写转义逻辑,你遇到的解析失败大概率是上下文适配问题,以下是具体说明:

一、JSON 规范强制要求转义的字符范围

按照 JSON 标准(RFC 8259),所有 JSON 字符串中必须转义的字符只有以下几类,json_encode 默认已经全部处理:

  • 双引号 ":转义为 \"
  • 反斜杠 \:转义为 \\
  • 控制字符(Unicode 范围 U+0000 ~ U+001F):包括换行 \n、回车 \r、制表符 \t、退格 \b、换页 \f 等,全部转义为对应转义序列或 \uXXXX 格式

二、需要额外转义的场景(90% 解析失败都是这个原因)

如果你是把生成的 JSON 直接嵌入到 HTML 页面中(比如写在 <script> 标签里、或者放在 data-* 自定义属性中),需要额外处理 HTML 特殊字符避免解析被打断,这部分可以通过 json_encode 的常量参数直接实现,不需要自己写逻辑:

// 加上这几个常量后输出的JSON可适配所有前端场景
$json = json_encode($your_array, JSON_UNESCAPED_UNICODE | JSON_HEX_TAG | JSON_HEX_AMP | JSON_HEX_QUOT | JSON_HEX_APOS);

这些常量的作用就是把特殊字符转为十六进制 Unicode 格式,避免和 HTML/JS 语法冲突:

  • <、> 转为 \u003C、\u003E,避免出现 </script> 这类字符串打断标签
  • & 转为 \u0026,避免被解析为 HTML 实体
  • 双引号、单引号转为 \u0022、\u0027,避免和 HTML 属性的引号冲突

三、常见解析失败排查方向

如果按上面的方式处理还是解析失败,优先排查以下问题:

  • 输出 JSON 前是否有其他额外输出:比如 PHP 报错、警告信息,或者手动 echo 了其他内容,导致 JSON 前后多出了无关字符
  • 数组内容编码是否为 UTF-8:json_encode 遇到非 UTF-8 字符会返回 false,输出的内容不是合法 JSON
  • 前端接收时是否手动对返回内容做了多余的转义处理:比如 AJAX 拿到响应后又做了一次 HTML 实体解码,导致特殊字符被还原破坏了 JSON 结构

四、如果确实需要自行实现转义,处理范围如下

如果你一定要自己写转义函数,按优先级需要处理的字符如下:

  1. 强制转义:\、"、所有 U+0000 ~ U+001F 控制字符
  2. 嵌入HTML场景额外转义:<、>、&、'、/

内容的提问来源于stack exchange,提问作者pathfinder

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.24 17:54:05