JSON:为什么要转义正斜杠?
JSON 不要求您这样做,它允许您这样做。它还允许您将 "\u0061" 用于 "A",但这不是必需的,就像 Harold L 指出的那样:
JSON 规范说您可以转义正斜杠,但您不必这样做。
Harold L 于 09 年 10 月 16 日 21:59 回答
\/
在<script>
标签中嵌入 JSON 时允许有帮助,这不允许</
在字符串中,就像 Seb 指出的那样:
这是因为 HTML 不允许
<script>
标签内的字符串包含</
,所以如果子字符串在那里,您应该转义每个正斜杠。
Seb 于 09 年 10 月 16 日 22:00 回答 (#1580667)
Microsoft 的一些 ASP.NET Ajax/JSON API 使用此漏洞添加额外信息,例如,日期时间将作为"\/Date(milliseconds)\/"
. (呸)
JSON 规范说您可以转义正斜杠,但您不必这样做。
我前段时间问了同样的问题,不得不自己回答。这是我想出的:
看来,我的第一个想法 [它来自它的JavaScript 根源] 是正确的。
'\/' === '/'
在 JavaScript 中,JSON是有效的 JavaScript。但是,为什么\z
JSON 中不允许其他被忽略的转义(如)?关键是阅读 http://www.cs.tut.fi/~jkorpela/www/revsol.html,然后是 http://www.w3.org/TR/html4/appendix/notes.html#hB .3.2 . 斜线转义的特性允许将 JSON 嵌入到 HTML(如 SGML)和 XML 中。
默认情况下,PHP 会转义正斜杠,这可能就是这种情况如此普遍的原因。我不知道为什么,但可能是因为嵌入字符串"</script>"
一个内部<script>
标签被认为是不安全的。
可以通过传入JSON_UNESCAPED_SLASHES
标志来禁用此功能,但大多数开发人员不会使用它,因为原始结果已经是有效的 JSON。