javascript - javascript encodeURIComponent 和转义?
问题描述
我使用 JS 将 encodeURIComponent 字符串发送到 PHP 文件写入,并且多年来一直运行良好;直到最近我遇到了一个奇怪的效果,即文本需要用转义进一步编码才能让它工作!只有当我使用开源的所见即所得编辑器时,症状才会开始显示!
URI 中需要转义来修复它的违规字符可能是什么?我以前认为 URI 只保留?& = 使其语法正常工作。
解决方案
您描述的情况可能可以通过涉及两个级别的嵌套 URL-like 值的 URL 来解释 - 尽管如果不告诉我们字符串是什么以及它是如何使用的,就无法知道。
考虑一个带有查询参数的 URL,该参数是另一个 URL:
http://me.com?url=http://you.com?qp=1
该 URL 容易被误解,因此我们通常会对 URL 进行 URL 编码you.com
,从而为我们提供:
http://me.com?url=http%3A%2F%2Fyou.com%3Fqp%3D1
使用此 URL 的任何人现在都可以提取以url
value命名的查询参数http%3A%2F%2Fyou.com%3Fqp%3D1
,对其进行解码(通常框架或库会为您解码),然后使用它跳转到或调用该 URL。
然而,考虑一下you.com
URL 本身有一个查询参数的情况,不是?qp=1
像第一个示例中给出的那样,而是本身需要进行 URL 编码的东西。为了简单起见,我们只使用“cat?pictures”。我们需要对其进行编码,使查询参数
换句话说,有问题的 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
但是请注意,如果您使用您的语言或环境的内置工具和库来处理查询参数,大部分情况将自动发生,您不必担心。
仅当我使用开源所见即所得编辑器时才开始显示症状
编辑器只是将字符放在文件中。很难想象编辑器会导致您提到的问题,除非可能某个编辑器被配置为使用智能引号,例如,这几乎会破坏涉及引号的所有内容。
推荐阅读
- javascript - 分享插件linkedin
- amazon-web-services - 在 AWS 中安装 Intel open webrtc 工具包服务器的问题
- android - 如何在适配器 kotlin 中打开全屏底部对话框
- pyodbc - 如何使用pyodbc从databricks工作区中提取dremio数据?
- python - 如何以编程方式“解析” Flask cli 命令?
- python - 如何在python中创建一个与内置范围函数相同的函数“我的范围”?
- android - Jetpack Paging3 库对同一页面进行多次调用
- amazon-web-services - 有没有办法公开公开 AWS lambda 层?
- javascript - Laravel - 在 Jquery 中使用刀片和 Ajax 来获取数据
- python - 如何创建一个可以加减有理数的python程序