JSON_UNESCAPED_SLASHES 使 json_encode() 不转义正斜杠 /,保持 URL 等路径字符串的可读性与简洁性,常与 JSON_UNESCAPED_UNICODE 组合使用。

JSON_UNESCAPED_SLASHES 是 PHP json_encode() 函数的一个选项,作用是**不让正斜杠 / 被自动转义成 \/**。这在输出 URL、HTML 片段或包含路径的字符串时特别有用,能保持原始可读性,也避免前端解析时多一层处理。
什么时候需要它?
默认情况下,json_encode() 会对 / 加反斜杠(如 "https:\/\/example.com"),这是为防止 类攻击而做的保守处理。但现代浏览器和 JSON 解析器早已不依赖这种转义,多数场景下反而显得冗余、影响调试和阅读。
- 返回含 URL 的 API 响应(比如
"url": "https://api.example.com/v1/data") - 嵌入 HTML 或 JS 中直接使用的 JSON 字符串
- 日志记录或调试输出时希望看到干净路径(如
"path": "/user/profile")
基本用法
直接传入第二个参数:
$data = ['url' => 'https://example.com/api', 'path' => '/v1/users'];
echo json_encode($data, JSON_UNESCAPED_SLASHES);
// 输出:{"url":"https://example.com/api","path":"/v1/users"}
对比默认行为:
使用 JSON Schema 验证 JSON 数据,从示例 JSON 生成 schema,并将其转换为 TypeScript 接口、Python 数据类或 Markdown 文档。
立即学习“PHP免费学习笔记(深入)”;
echo json_encode($data);
// 输出:{"url":"https:\/\/example.com\/api","path":"\/v1\/users"}
常和其他选项组合使用
实际项目中,几乎总会搭配 JSON_UNESCAPED_UNICODE(保留中文不转 Unicode)一起用:
- 用位运算符
|组合:更清晰、推荐 - 或手动相加数值(
JSON_UNESCAPED_SLASHES= 64,JSON_UNESCAPED_UNICODE= 256 → 总和 320)
// 推荐写法(语义明确) json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); // 等效但不推荐(数字魔法,难维护) json_encode($data, 320);
注意边界情况
这个选项只影响 / 字符本身,不改变其他转义规则:
- 双引号
"、反斜杠\、控制字符等仍会正常转义 - 如果字符串里有
,PHP 不再主动拦截 —— 这不是安全漏洞,而是因为现代 JSON 使用方式已不同;若需嵌入 HTML,请用<script>JSON.parse(...)</script>或服务端做额外 HTML 转义 - 确保源数据是 UTF-8 编码,否则即使加了
JSON_UNESCAPED_UNICODE也可能出错


















