我json_encode在PHP中使用来编码URL
$json_string = array ('myUrl'=> 'http://example.com');
echo json_encode ($json_string);
Run Code Online (Sandbox Code Playgroud)
上面的代码生成以下JSON字符串:
{"myUrl":"http:\/\/example.com"}
Run Code Online (Sandbox Code Playgroud)
而不是
{"myUrl":"http://example.com"}
Run Code Online (Sandbox Code Playgroud)
我只是新手,哪个输出正确?JSON解析器能够正确评估第二个输出吗?
根据http://www.json.org/,应该逃避该角色,尽管在JavaScript中并不是绝对必要的:

另请阅读php.net上的相关错误报告,以获得简短的讨论.
请参阅RFC的 2.5 :
除了必须转义的字符外,所有Unicode字符都可以放在引号内:引号,反向固定和控制字符(U + 0000到U + 001F).
任何角色都可能被转义.
所以它听起来并不需要被转义,但它可以,并且网站(以及RFC中的文本图表)将其描述为被转义.
我的猜测是,该函数的编写者通过简单的无知添加了不必要的编码.转义正斜杠是不是必需的.
我所知道的程序员数量惊人,与世界其他地方一样直截了当.而正确编码和解码的数字甚至更多.
更新:
在做了一些搜索之后,我遇到了这个讨论.它提出了一个很好的观点,即/错误的HTML解析器有时需要转义a .当IE 6错误地处理这样的内容时,我遇到了一个问题:
<script>
var json = { scriptString: "<script> /* JavaScript here */ </script>" };
</script>
Run Code Online (Sandbox Code Playgroud)
IE 6会看到</script>字符串的内部并过早关闭脚本标记.因此,这是更安全的IE 6(虽然字符串中的开始脚本标签也可能会破坏事情......我不记得了):
<script>
var json = { scriptString: "<script> \/* JavaScript here *\/ <\/script>" };
</script>
Run Code Online (Sandbox Code Playgroud)
而且他们也说一些不好的解析器会看到//在http://和对待该行的其余部分像一个JavaScript注释.
所以看起来这是互联网技术被浏览器失败劫持的又一个案例.
我认为这可以解决你的问题
json_encode ($json_string, JSON_UNESCAPED_SLASHES );
Run Code Online (Sandbox Code Playgroud)
您可以查看文档:
https://www.php.net/manual/en/function.json-encode.php
https://www.php.net/manual/en/json.constants.php
| 归档时间: |
|
| 查看次数: |
14095 次 |
| 最近记录: |