json_encode()
默认情况下,PHP的转义符使用正斜杠,但可以JSON_UNESCAPED_SLASHES
选择从PHP 5.4.0开始(2012
'</'
以下情况下不会转义每个斜杠:echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
json_encode()
默认情况下,PHP的转义符使用正斜杠,但可以JSON_UNESCAPED_SLASHES
选择从PHP 5.4.0开始(2012
'</'
以下情况下不会转义每个斜杠:echo str_replace('</', '<\/', json_encode($obj, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES));
Answers:
JSON不需要您执行此操作,而是允许您执行此操作。它还允许您将“ \ u0061”用于“ A”,但这不是必需的。\/
在将JSON嵌入<script>
标记中时允许帮助,该标记不允许</
内部字符串出现,如Seb指出的那样。
Microsoft的一些ASP.NET Ajax / JSON API使用此漏洞来添加额外的信息,例如datetime将作为发送"\/Date(milliseconds)\/"
。(Y)
/
不是必需的,这是允许的,以缓解使用JSON的。如果您不想逃脱/
,那就不要。
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中。
的JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES
必须是默认的,而不是一个(奇怪)选项... 怎么说给PHP开发人员?
在默认情况下一定是最频繁使用,以及(电流)使用最广泛的标准UTF8。Github或其他地方有多少PHP代码片段需要这种外来的“嵌入HTML”功能?
'\/' === '/'
返回true。我建议你坚持事实。大多数人都能应付一些不一致的函数名称。仅仅因为您看不到过去就不会使PHP成为不良工具。