一、问题背景:json_encode 为什么会把 / 变成 \/
在使用 PHP 的 json_encode() 函数时,很多开发者会发现一个现象:
$url = "https://www.46.la/tool/html-entities";
echo json_encode($url);
输出结果如下:
"https:\/\/www.46.la\/tool\/html-entities"
可以看到,URL 中的 / 被转义成了 \/。这让很多人误以为数据被“破坏”了,实际上这是 JSON 标准允许的行为。
二、根本原因:JSON 规范中的转义规则
根据 JSON 标准(RFC 8259),斜杠 / 可以被转义为 \/,但这并不是必须的。
PHP 之所以默认进行转义,主要是出于以下安全考虑:
- 防止在 HTML 的
<script>标签中输出 JSON 时被错误解析 - 避免出现
</script>被浏览器提前结束脚本的问题 - 提高嵌入 HTML 时的安全性
例如:
<script>
var data = {"url":"https:\/\/example.com"};
</script>
这种写法可以避免浏览器误解析 </script>。
三、是否会影响 JSON 解析?
答案是:不会。
无论是:
"https:\/\/example.com"
还是:
"https://example.com"
在 JavaScript 中解析结果是完全一样的:
JSON.parse('"https:\/\/example.com"');
// 等同于
JSON.parse('"https://example.com"');
也就是说,这只是“显示形式不同”,数据本身没有变化。
四、解决方案:使用 JSON_UNESCAPED_SLASHES
如果你希望输出更直观、可读性更强的 JSON,可以使用:
echo json_encode($data, JSON_UNESCAPED_SLASHES);
这样输出结果将变为:
"https://www.46.la/tool/html-entities"
五、推荐组合写法(开发中最佳实践)
在实际开发中,建议结合多个参数一起使用:
echo json_encode(
$results,
JSON_UNESCAPED_UNICODE
| JSON_UNESCAPED_SLASHES
| JSON_PRETTY_PRINT
);
作用说明:
- JSON_UNESCAPED_UNICODE:避免中文被转成
\uXXXX - JSON_UNESCAPED_SLASHES:避免 URL 中的斜杠转义
- JSON_PRETTY_PRINT:格式化输出,方便调试
六、使用场景分析
1、API 接口输出
推荐开启 JSON_UNESCAPED_SLASHES,让返回数据更清晰:
- 更易调试
- 更利于日志记录
- 更方便前端查看
2、SEO 工具开发
例如你在做 URL 分析工具或站长工具时:
- 用户需要直接看到真实 URL
- 不希望出现
\/影响可读性
这种情况下必须关闭斜杠转义。
3、安全敏感场景
如果 JSON 会嵌入 HTML 页面中:
- 可以保留默认转义(更安全)
- 或使用 CSP / JSON script 标签方式替代
七、常见误区
误区一:以为数据被破坏
实际上只是显示问题,JSON 解析完全一致。
误区二:强行替换字符串
错误写法:
str_replace('\/', '/', json_encode($data));
这种方式不推荐,可能导致不可预期问题。
误区三:忽略 Unicode 转义
如果你不加:
- 中文会变成
\u4e2d\u6587
影响用户体验。
八、总结
PHP 的 json_encode() 默认转义斜杠是一种安全策略,而不是错误行为。对于现代 Web 开发来说:
- 推荐开启
JSON_UNESCAPED_SLASHES - 配合
JSON_UNESCAPED_UNICODE使用 - 开发 API 时优先保证可读性
最终推荐标准写法:
echo json_encode($data, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
比对写法:
// 输出 JSON
echo json_encode($results, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT);
echo json_encode($results, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES | JSON_PRETTY_PRINT);
这样既保证数据规范,又兼顾开发体验与可读性。
© 原创声明:本文由 四六啦工具 于 2 小时 前发表在 代码笔记 分类目录中,最后更新于2026年4月6日,转载请注明本文永久链接:https://www.46.la/php-json-encode-unescaped-slashes
相关文章
本文暂时没有评论,来添加一个吧(●'◡'●)
