首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >为什么JSON编码器在编码URL时会添加转义字符?

为什么JSON编码器在编码URL时会添加转义字符?
EN

Stack Overflow用户
提问于 2010-09-16 10:11:15
回答 4查看 15.6K关注 0票数 14

我正在使用PHP中的json_encode对URL进行编码。

代码语言:javascript
运行
复制
$json_string = array ('myUrl'=> 'http://example.com');
echo json_encode ($json_string);

上面的代码生成以下JSON字符串:

代码语言:javascript
运行
复制
{"myUrl":"http:\/\/example.com"}   

而不是

代码语言:javascript
运行
复制
{"myUrl":"http://example.com"}

我是新手,哪种输出是正确的?JSON解析器是否能够正确评估第二个输出?

EN

回答 4

Stack Overflow用户

发布于 2010-09-16 10:15:47

我的猜测是,该函数的编写者通过纯粹的无知添加了不必要的编码。转义正斜杠不是必需的。

令人惊讶的是,我认识的许多程序员都和世界上其他地方的程序员一样不善于保持斜杠。而且更多的人在正确地进行编码和解码方面确实很差。

更新:

在做了一些搜索之后,我偶然发现了this discussion。它提出了一个好的观点,对于糟糕的/解析器来说,转义HTML有时是必要的。我曾经遇到过一个问题,当IE6错误地处理如下内容时:

代码语言:javascript
运行
复制
<script>
    var json = { scriptString: "<script> /* JavaScript here */ </script>" };
</script>

IE6会看到字符串中的脚本,并过早地关闭</script>标记。因此,这是更安全的IE6(虽然在字符串中的开始脚本标记也可能会破坏东西...我记不起来了):

代码语言:javascript
运行
复制
<script>
    var json = { scriptString: "<script> \/* JavaScript here *\/ <\/script>" };
</script>

他们还说,一些糟糕的解析器会在http://中看到//,并将该行的其余部分视为JavaScript注释。

因此,这看起来是互联网技术被浏览器故障劫持的又一起案例。

票数 8
EN

Stack Overflow用户

发布于 2011-12-10 17:04:15

如果你使用的是php 5.4,你可以使用json_encode选项。请参阅manual

在php 5.3中添加了几个选项,但在5.4中添加了JSON_UNESCAPED_SLASHES

票数 5
EN

Stack Overflow用户

发布于 2020-04-13 11:32:40

我想这解决了你的问题

代码语言:javascript
运行
复制
json_encode ($json_string, JSON_UNESCAPED_SLASHES );

您可以查看文档:

https://www.php.net/manual/en/function.json-encode.php

https://www.php.net/manual/en/json.constants.php

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3723243

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档