首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >javascript encodeURIComponent和转义?

javascript encodeURIComponent和转义?
EN

Stack Overflow用户
提问于 2018-07-07 11:47:26
回答 1查看 279关注 0票数 0

我使用JS将encodeURIComponent字符串发送到PHP文件写入器,多年来一直运行良好;直到最近,我遇到了一种奇怪的效果,即文本需要进一步编码以转义才能正常工作!只有当我使用开源的所见即所得编辑器时,症状才开始显示出来!

URI中哪些有问题的字符需要转义来修复?我过去认为URI只保留?&=才能使其语法生效。

EN

回答 1

Stack Overflow用户

发布于 2018-07-07 13:56:00

如果不告诉我们字符串是什么,以及它是如何使用的,就有可能解释您所描述的情况--尽管如果不告诉我们字符串是什么,以及它是如何使用的,那么就无法知道它是什么。

考虑一个URL,它接受另一个URL的查询参数:

代码语言:javascript
复制
http://me.com?url=http://you.com?qp=1

该URL容易被误解,所以我们通常对you.com URL进行URL编码,给出如下结果:

代码语言:javascript
复制
http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3D1

使用这个URL的任何人现在都可以提取具有值http%3A%2F%2Fyou.com%3Fqp%3D1的名为url的查询参数,对其进行解码(通常由框架或库为您解码),然后使用它跳转到该URL或调用该URL。

但是,考虑这样一种情况: URL本身有一个查询参数,而不是第一个示例中给出的?qp=1,而是本身需要经过you.com编码的内容。为了简单起见,我们只使用“猫图片”。我们需要对其进行编码,使查询参数

换句话说,有问题的URL将是

代码语言:javascript
复制
?qp=cat%3Fpictures

如果我们只是按原样使用它,那么我们的整个URL将变成

代码语言:javascript
复制
http://me.com?url=http%3A%2F%2Fyou.com%3Fqp=cat%3Fpictures

不幸的是,如果我们现在以一种天真的方式解码,我们会得到

代码语言:javascript
复制
http://me.com?url=http://you.com?qp=cat?pictures

换句话说,嵌套的网址也被解码了,这意味着它会认为网址有两个查询参数,即url qp。为了成功处理这个问题,我们需要对第二个查询参数进行第二次编码,生成

代码语言:javascript
复制
http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3Dcat%253Fpictures

但是,请注意,如果您使用您的语言或环境的内置工具和库来处理查询参数,大多数操作将自动发生,从而使您不必担心这些问题。

只有当我使用开源的所见即所得编辑器时,症状才开始显现

编辑器只是在文件中放置字符。很难想象是编辑器导致了您提到的问题,除非可能有一个编辑器被配置为使用智能引号,例如,这几乎会破坏涉及引号的所有内容。

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

https://stackoverflow.com/questions/51219731

复制
相关文章

相似问题

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