首页 > web前端 > js教程 > 了解空格的编码方式:%withencodeURI 与 withURL

了解空格的编码方式:%withencodeURI 与 withURL

Patricia Arquette
发布: 2024-11-28 03:36:10
原创
729 人浏览过

您可以使用encodeURI 或URL 对查询字符串进行编码。最近,我注意到 URL 对空格的编码不同。我将讨论为什么他们以不同的方式处理编码。在深入讨论该主题之前,我将向您展示如何使用每种方法进行编码。


用法

1. 编码URI

您可以使用encodeURI 函数对URI 进行编码。然而,。它不会对属于 URI 有效部分的部分字符进行编码,因此您可能需要使用encodeURIComponent 函数来正确编码查询字符串或 URI 中的其他组件。

例如,假设您有一个值为
的查询字符串 q https://www.google.com/search?q=& 是什么意思?.

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

&(& 符号)未按应有的方式转换为 &。因为 &(& 符号) 可以是 URI 的有效部分。因此,对查询字符串使用encodeURIComponent 总是更安全。

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

由于encodeURIX和相关函数将URI视为字符串,因此您必须处理特殊字符,例如?和你自己。或者,您可以使用 URL 来简化流程。


2. 网址

使用 URL 进行编码时,需要分别处理基本 URL 和查询字符串。

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

如果使用 URL 构造函数一次对所有内容进行编码,如上例所示,查询字符串可能无法正确编码。

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

通过 URL 对象的 searchParams 属性设置查询字符串,可以设置查询字符串。

在这种情况下,空格将转换为 .在解释为什么会发生这种情况之前,让我们用另一个查询字符串对其进行测试,看看它如何处理其他特殊字符。

其他特殊字符按预期编码。

现在,让我们深入探讨为什么会出现这些差异。


编码

1. 编码URI

encodeURIX 函数根据 RFC2396 进行编码。 URI 不仅仅是互联网上的一个位置;它可以引用任何类型的资源。这就是为什么它被称为 URI(统一资源标识符)而不是 URL(统一资源定位符)。


2. 网址

URL API 根据 RFC3986 进行编码,这是更新的 URI 规范。

如果您需要使用encodeURI来实现此行为,请参阅此。 - RF3986 的encodeURIComponent 编码)。

URLSearchParams 遵循百分比编码规则进行编码。根据文档,它将空格替换为“”。

虽然我在 RFC 中找不到此行为的规范,但 MDN 的encodeURIComponent 文档指出:

对于 application/x-www-form-urlencoded,空格将被 替换,因此人们可能希望在encodeURIComponent() 替换之后再用 .

替换

这解释了为什么 URLSearchParams 中的空格被替换为“ ”,因为它遵循 application/x-www-form-urlencoded 标准。

您可能已经注意到,URL 和 URLSearchParams 遵循不同的 RFC。

让我们看一些例子。

如图所示,URL 不对括号和冒号进行编码,因为它们是 IPv6 地址的一部分。但是,冒号不会被编码为 :,即使它是查询字符串的一部分。它与百分比编码表不同。

这意味着您需要分别对 URL 和查询字符串进行编码。

Understanding How Spaces Are Encoded: %with encodeURI vs.   with URL

现在,URL 和查询字符串已正确编码。


结论

encodeURI、encodeURIComponent、URL 和 URLSearchParams 函数各自有不同的用途,您应该根据您的具体需求使用它们。

encodeURI:根据 RFC2396 对 URI 进行编码。它不会对属于 URI 有效部分的字符进行编码。如果您需要根据 RFC3986 对 URI 进行编码,请参阅此 MDN 文档。

encodeURIComponent:根据 RFC2396 对 URI 的组件进行编码,例如路径、片段或查询字符串。它包含未由encodeURI 编码的字符。

URL:根据 RFC3986 对 Web URL 进行编码。

URLSearchParams:根据 application/x-www-form-urlencoded 标准对参数进行编码。

如果需要将(加号)替换为 ,可以手动进行,如下所示:

在使用 Web 开发、Restful API 或 Web URL 时,URL 是可靠的选择。此外,它遵循 RFC3986,它比 RFC2396 更新。


希望您觉得这有帮助。

编码快乐!

以上是了解空格的编码方式:%withencodeURI 与 withURL的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:dev.to
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板