我正在使用PHP中的json_encode
对URL进行编码。
$json_string = array ('myUrl'=> 'http://example.com');
echo json_encode ($json_string);
上面的代码生成以下JSON字符串:
{"myUrl":"http:\/\/example.com"}
而不是
{"myUrl":"http://example.com"}
我是新手,哪种输出是正确的?JSON解析器是否能够正确评估第二个输出?
发布于 2010-09-16 10:15:47
我的猜测是,该函数的编写者通过纯粹的无知添加了不必要的编码。转义正斜杠不是必需的。
令人惊讶的是,我认识的许多程序员都和世界上其他地方的程序员一样不善于保持斜杠。而且更多的人在正确地进行编码和解码方面确实很差。
更新:
在做了一些搜索之后,我偶然发现了this discussion。它提出了一个好的观点,对于糟糕的/
解析器来说,转义HTML有时是必要的。我曾经遇到过一个问题,当IE6错误地处理如下内容时:
<script>
var json = { scriptString: "<script> /* JavaScript here */ </script>" };
</script>
IE6会看到字符串中的脚本,并过早地关闭</script>
标记。因此,这是更安全的IE6(虽然在字符串中的开始脚本标记也可能会破坏东西...我记不起来了):
<script>
var json = { scriptString: "<script> \/* JavaScript here *\/ <\/script>" };
</script>
他们还说,一些糟糕的解析器会在http://
中看到//
,并将该行的其余部分视为JavaScript注释。
因此,这看起来是互联网技术被浏览器故障劫持的又一起案例。
发布于 2011-12-10 17:04:15
如果你使用的是php 5.4,你可以使用json_encode
选项。请参阅manual。
在php 5.3中添加了几个选项,但在5.4中添加了JSON_UNESCAPED_SLASHES
。
发布于 2020-04-13 11:32:40
我想这解决了你的问题
json_encode ($json_string, JSON_UNESCAPED_SLASHES );
您可以查看文档:
https://stackoverflow.com/questions/3723243
复制相似问题