Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

escape、encodeURI、encodeURIComponent 区别【热度: 367】 #439

Open
yanlele opened this issue Jun 8, 2023 · 0 comments
Open

escape、encodeURI、encodeURIComponent 区别【热度: 367】 #439

yanlele opened this issue Jun 8, 2023 · 0 comments
Labels
JavaScript JavaScript 语法部分 阿里巴巴 公司标签
Milestone

Comments

@yanlele
Copy link
Member

yanlele commented Jun 8, 2023

关键词:js URL 编码解码

在 JavaScript 中,escape()encodeURI()encodeURIComponent() 都是用于编码 URL 或字符串的函数,但它们有一些区别:

  1. escape() 函数用于编码字符串中的特殊字符,使其能够安全地传输。它对字符进行编码,包括非 ASCII 字符和特殊字符。但需要注意的是,escape() 不会编码 URL 中的保留字符(例如 :/?#[]@!$&'()*+,;=),它只会编码其他字符。
// 输出:%48%65%6c%6c%6f%20%57%6f%72%6c%64%21
console.log(escape("Hello World!"));  
  1. encodeURI() 函数用于对整个 URL 进行编码,用于将 URL 中的特殊字符转换为可传输的形式。它不会编码 URL 中的保留字符和一些特殊字符(例如 :/?#[]@!$&'()*+,;=)。它主要用于编码整个 URL,而不是编码 URL 的参数值。
// 输出:http://example.com/page.php?id=123
console.log(encodeURI("http://example.com/page.php?id=123"));  
  1. encodeURIComponent() 函数用于编码 URL 的参数值,它会对所有特殊字符进行编码,包括 URL 中的保留字符和其他特殊字符。它用于编码 URL 参数中的特殊字符,以确保它们在 URL 中的传输和解析过程中不会被误解。
// 输出:Hello%20World%21
console.log(encodeURIComponent("Hello World!"));  

需要注意的是,escape() 函数已被废弃,不推荐使用。在大多数情况下,建议使用 encodeURI()encodeURIComponent() 函数进行 URL 编码。选择使用哪个函数取决于具体的需求,是否需要编码整个 URL 或只是其中的一部分(如参数值)。


补充

函数 编码范围 编码空格 编码特殊字符 可逆性
escape ASCII 字符外的所有字符 +
encodeURI URL 中的部分字符
encodeURIComponent URL 中的所有字符 %20

下面是对每个函数的详细解释:

  1. escape 函数用于编码字符串中的所有字符,包括非 ASCII 字符和某些特殊字符。它会将这些字符转换为 %xx 形式的十六进制转义序列,其中 xx 是字符的 ASCII 值的十六进制表示。它还会将空格编码为 + 符号。该函数可以对编码后的字符串进行反转义,以还原原始字符串。

  2. encodeURI 函数用于对 URL 中的某些字符进行编码,包括保留字符和一些特殊字符。它会将这些字符转换为 %xx 形式的十六进制转义序列,其中 xx 是字符的 ASCII 值的十六进制表示。与 escape 不同,encodeURI 不会编码空格。该函数可以对编码后的字符串进行反转义,以还原原始字符串。

  3. encodeURIComponent 函数用于对 URL 中所有字符进行编码,包括保留字符和特殊字符。它会将这些字符转换为 %xx 形式的十六进制转义序列,其中 xx 是字符的 ASCII 值的十六进制表示。与 encodeURI 不同,encodeURIComponent 会将空格编码为 %20。该函数可以对编码后的字符串进行反转义,以还原原始字符串。

@yanlele yanlele added JavaScript JavaScript 语法部分 阿里巴巴 公司标签 labels Jun 8, 2023
@yanlele yanlele added this to the milestone Jun 8, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
JavaScript JavaScript 语法部分 阿里巴巴 公司标签
Projects
None yet
Development

No branches or pull requests

1 participant