我使用JS将encodeURIComponent字符串发送到PHP文件写入器,多年来一直运行良好;直到最近,我遇到了一种奇怪的效果,即文本需要进一步编码以转义才能正常工作!只有当我使用开源的所见即所得编辑器时,症状才开始显示出来!
URI中哪些有问题的字符需要转义来修复?我过去认为URI只保留?&=才能使其语法生效。
发布于 2018-07-07 13:56:00
如果不告诉我们字符串是什么,以及它是如何使用的,就有可能解释您所描述的情况--尽管如果不告诉我们字符串是什么,以及它是如何使用的,那么就无法知道它是什么。
考虑一个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的任何人现在都可以提取具有值http%3A%2F%2Fyou.com%3Fqp%3D1的名为url的查询参数,对其进行解码(通常由框架或库为您解码),然后使用它跳转到该URL或调用该URL。
但是,考虑这样一种情况: URL本身有一个查询参数,而不是第一个示例中给出的?qp=1,而是本身需要经过you.com编码的内容。为了简单起见,我们只使用“猫图片”。我们需要对其进行编码,使查询参数
换句话说,有问题的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 和 qp。为了成功处理这个问题,我们需要对第二个查询参数进行第二次编码,生成
http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3Dcat%253Fpictures但是,请注意,如果您使用您的语言或环境的内置工具和库来处理查询参数,大多数操作将自动发生,从而使您不必担心这些问题。
只有当我使用开源的所见即所得编辑器时,症状才开始显现
编辑器只是在文件中放置字符。很难想象是编辑器导致了您提到的问题,除非可能有一个编辑器被配置为使用智能引号,例如,这几乎会破坏涉及引号的所有内容。
https://stackoverflow.com/questions/51219731
复制相似问题