我使用JS来将encodeURIComponent字符串发送到PHP文件写入,并且已经运行了好几年。直到最近,我遇到了一个奇怪的效果,即文本需要进一步进行转义编码才能生效!仅当我使用开源所见即所得编辑器时,该症状才开始显示!
在URI中哪些需要冒犯的字符需要修复以解决该问题?我曾经认为URI仅保留? &=使其语法起作用。
答案 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
但是请注意,如果您使用语言或环境的内置工具和库来处理查询参数,则大多数操作将自动发生,从而不必担心。
仅当我使用开源所见即所得编辑器时,症状才开始显示
编辑器仅将字符放置在文件中。很难想象会有一个编辑器引起您所指的问题,例如,除非某个编辑器配置为使用智能引号,否则这几乎会破坏涉及引号的所有内容。