关键词:js URL 编码解码
在 JavaScript 中,escape()、encodeURI() 和 encodeURIComponent() 都是用于编码 URL 或字符串的函数,但它们有一些区别:
escape()函数用于编码字符串中的特殊字符,使其能够安全地传输。它对字符进行编码,包括非 ASCII 字符和特殊字符。但需要注意的是,escape()不会编码 URL 中的保留字符(例如:/?#[]@!$&'()*+,;=),它只会编码其他字符。
// 输出:%48%65%6c%6c%6f%20%57%6f%72%6c%64%21
console.log(escape("Hello World!")); encodeURI()函数用于对整个 URL 进行编码,用于将 URL 中的特殊字符转换为可传输的形式。它不会编码 URL 中的保留字符和一些特殊字符(例如:/?#[]@!$&'()*+,;=)。它主要用于编码整个 URL,而不是编码 URL 的参数值。
// 输出:http://example.com/page.php?id=123
console.log(encodeURI("http://example.com/page.php?id=123")); 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 |
是 | 是 |
下面是对每个函数的详细解释:
-
escape函数用于编码字符串中的所有字符,包括非 ASCII 字符和某些特殊字符。它会将这些字符转换为%xx形式的十六进制转义序列,其中xx是字符的 ASCII 值的十六进制表示。它还会将空格编码为+符号。该函数可以对编码后的字符串进行反转义,以还原原始字符串。 -
encodeURI函数用于对 URL 中的某些字符进行编码,包括保留字符和一些特殊字符。它会将这些字符转换为%xx形式的十六进制转义序列,其中xx是字符的 ASCII 值的十六进制表示。与escape不同,encodeURI不会编码空格。该函数可以对编码后的字符串进行反转义,以还原原始字符串。 -
encodeURIComponent函数用于对 URL 中所有字符进行编码,包括保留字符和特殊字符。它会将这些字符转换为%xx形式的十六进制转义序列,其中xx是字符的 ASCII 值的十六进制表示。与encodeURI不同,encodeURIComponent会将空格编码为%20。该函数可以对编码后的字符串进行反转义,以还原原始字符串。