javascript encodeURIComponent并转义?

时间:2018-07-07 03:47:26

标签: javascript escaping encodeuricomponent

我使用JS来将encodeURIComponent字符串发送到PHP文件写入,并且已经运行了好几年。直到最近,我遇到了一个奇怪的效果,即文本需要进一步进行转义编码才能生效!仅当我使用开源所见即所得编辑器时,该症状才开始显示!

在URI中哪些需要冒犯的字符需要修复以解决该问题?我曾经认为URI仅保留? &=使其语法起作用。

1 个答案:

答案 0 :(得分:0)

您所描述的情况可以通过一个包含两个嵌套的类URL值的URL来解释-尽管没有您不告诉我们该字符串是什么以及如何使用它的信息,就无法知道。 / p>

考虑一个带有查询参数的URL,这是另一个URL:

http://me.com?url=http://you.com?qp=1

该URL可能会被误解,因此我们通常会对you.com URL进行URL编码,从而得到:

http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3D1

使用此URL的人现在可以提取值为url的名为http%3A%2F%2Fyou.com%3Fqp%3D1的查询参数,对其进行解码(通常框架或库会为您解码),然后将其用于跳转或调用该URL。

但是,请考虑以下情况:you.com URL本身具有查询参数,而不是如第一个示例中所述的?qp=1,而是需要对其进行URL编码的查询参数。为简单起见,我们只使用“猫图片”。我们需要对其进行编码,使其成为查询参数

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

?qp=cat%3Fpictures

如果我们按原样使用它,那么我们的整个URL就会变成

http://me.com?url=http%3A%2F%2Fyou.com%3Fqp=cat%3Fpictures

不幸的是,如果我们现在以一种幼稚的方式对其进行解码,我们会得到

http://me.com?url=http://you.com?qp=cat?pictures

换句话说,嵌套的URL也已被解码,这意味着它将认为URL具有两个查询参数,即url qp。为了成功解决此问题,我们需要对第二个查询参数进行第二次编码,从而产生

http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3Dcat%253Fpictures

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

  

仅当我使用开源所见即所得编辑器时,症状才开始显示

编辑器仅将字符放置在文件中。很难想象会有一个编辑器引起您所指的问题,例如,除非某个编辑器配置为使用智能引号,否则这几乎会破坏涉及引号的所有内容。