php 的 json_encode() 和 json_decode() 自动处理特殊字符,无需手动转义;控制字符转为 unicode 序列,双引号与反斜杠自动转义,中文需 json_unescaped_unicode 选项才原样输出,斜杠和 html 符号按需配置选项。

PHP 的 json_encode() 和 json_decode() 对特殊字符有默认且规范的处理逻辑,不需要手动转义,但需理解其行为并合理配置选项,才能避免意外输出或解析失败。
自动转义常见控制字符
json_encode 会把制表符( )、换行符(
、
)、回车符等不可见字符,统一转为 u0009、u000a、u000d 等 Unicode 转义序列,符合 JSON 标准。这是安全且兼容的做法,无需干预。
- 原始字符串:
$str = "第一行 第二行 缩进"; - 编码后:
"第一行u000a第二行u0009缩进" - 若希望保留可读性(如调试用),可加
JSON_UNESCAPED_UNICODE,但控制字符仍会被转义——该选项只影响中文等 UTF-8 多字节字符,不改变控制字符行为
引号与反斜杠由函数自动管理
双引号(")和反斜杠()在 JSON 中属于必须转义的字符。json_encode 会在内部自动完成,你只需传入原始 PHP 字符串即可。
- 例如:
$str = 'He said "Hi!" and used \backslash'; - 执行
json_encode($str)→ 输出:"He said "Hi!" and used \\backslash" - 切勿提前用
str_replace手动加反斜杠,否则会导致重复转义,生成错误 JSON
中文等 UTF-8 字符需显式启用不转义
默认情况下,json_encode 会把中文转成 uXXXX 形式,看起来像乱码。这不是错误,而是兼容性设计。要输出原样中文,必须加 JSON_UNESCAPED_UNICODE 选项。
- 正确写法:
json_encode(['姓名' => '张三'], JSON_UNESCAPED_UNICODE) - 前提是:字符串本身是合法 UTF-8 编码;脚本文件无 BOM;数据库/输入源也已统一为 UTF-8
- 若跳过该选项,又没做编码归一化,可能返回
null(可用json_last_error()检查)
斜杠、HTML 符号等按需控制
正斜杠 / 默认会被转义为 /(主要为防止 HTML 中的 被误解析)。如需禁用,加 JSON_UNESCAPED_SLASHES。
- 含 URL 的数据:
['url' => 'https://example.com/api/v1'] - 加选项后输出:
{"url":"https://example.com/api/v1"},更简洁 - 若内容含 HTML 片段,建议先用
htmlspecialchars()编码再 json_encode,而不是依赖 JSON 函数处理 HTML 安全
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











