Php 为什么JSON编码器在编码URL时添加转义字符?
我在PHP中使用Php 为什么JSON编码器在编码URL时添加转义字符?,php,json,Php,Json,我在PHP中使用json\u encode对URL进行编码 $json_string = array ('myUrl'=> 'http://example.com'); echo json_encode ($json_string); 上述代码生成以下JSON字符串: {"myUrl":"http:\/\/example.com"} 而不是 {"myUrl":"http://example.com"} 我只是个新手,哪个输出是正确的?JSON解析器能够正确地计算第二个输出吗?我
json\u encode
对URL进行编码
$json_string = array ('myUrl'=> 'http://example.com');
echo json_encode ($json_string);
上述代码生成以下JSON字符串:
{"myUrl":"http:\/\/example.com"}
而不是
{"myUrl":"http://example.com"}
我只是个新手,哪个输出是正确的?JSON解析器能够正确地计算第二个输出吗?我的猜测是,该函数的编写者添加了不必要的编码,完全是出于无知。不需要转义前斜杠 我所认识的许多程序员都和世界上其他人一样,在保持直线方面做得很差。还有更多的人在正确地进行编码和解码时表现不佳 更新: 在做了一些搜索之后,我发现。它提出了一个好的观点,即对
/
进行转义有时对于糟糕的HTML解析器是必要的。我曾经遇到过一个问题,当IE 6错误地处理这样的内容时:
<script>
var json = { scriptString: "<script> /* JavaScript here */ </script>" };
</script>
var json={scriptString://JavaScript here*/“};
IE 6会看到字符串内部的
,过早地关闭脚本标记。因此,这比IE 6更安全(虽然字符串中的开始脚本标记也可能会破坏某些东西…我记不起来了):
var json={scriptString:\/*JavaScript here*\/“};
他们还说,一些糟糕的解析器会在http://中看到//
,并将行的其余部分视为JavaScript注释
因此,这似乎是互联网技术被浏览器故障劫持的又一个例子。根据,人们应该避开这个字符,尽管在JavaScript中这并不是绝对必要的:
也可以在php.net上阅读本文,进行简短的讨论
见第2.5节:
可以放置所有Unicode字符
在引号内,除了
必须转义的字符:
引号、反向索利多金币和
控制字符(U+0000到
U+001F)
任何字符都可以转义
所以听起来不需要转义,但可以转义,网站(和RFC中的文本图)将其说明为转义。我看到了另一个问题。字符串结果
{“myUrl”:http://example.com“}
不应引用成员名称myUrl。在JavaScript和JSON中,我认为所有对象文本成员ID都是不带引号的字符串。因此,我希望结果是{myUrl:http://example.com“}
这在PHP中似乎是一个太大的错误,所以我一定是错了
编辑,2011年2月11日:是的,我错了。JSON语法甚至要求字段名用双引号括起来。如果您使用的是PHP5.4,您可以使用
JSON\u encode
选项。看
PHP5.3中添加了几个选项,但在5.4中添加了
JSON\u UNESCAPED\u斜杠。
我认为这解决了您的问题
json_encode ($json_string, JSON_UNESCAPED_SLASHES );
您可以查看文档:我同意。但值得注意的是,结果字符串是有效的。在javascript字符串中,可以通过在任何字符前面加反斜杠来转义该字符。因此,Javascript将“\/”解释为简单的“/”。JSON与Javascript不同。在JSON中,您不允许反斜杠任何您喜欢的内容。但奇怪的是,您可以在字符串中反斜杠,所以它仍然有效。:)
json_encode ($json_string, JSON_UNESCAPED_SLASHES );