escape、encodeURI、encodeURIComponent 的区别
escape
、encodeURI
和 encodeURIComponent
是 JavaScript 中用于编码和处理 URL 或 URI 组件的函数。尽管它们的目的相似,但在字符编码方面存在一些差异。以下是它们之间的区别:
escape
:escape
函数用于将字符串编码为 URL 编码格式,包括非 ASCII 字符。它会用十六进制转义序列替换某些字符。然而,escape
函数有一些限制,并且已被认为是不推荐使用的,建议使用encodeURI
和encodeURIComponent
。encodeURI
:encodeURI
函数用于编码完整的 URI 或 URL。它将不允许在 URI 中使用的字符(如空格、特殊字符和非 ASCII 字符)编码为它们的 UTF-8 十六进制转义序列。但是,它不会编码在 URI 中具有特殊含义的字符,如冒号(:)或斜杠(/)。encodeURIComponent
:encodeURIComponent
函数用于编码 URI 或 URL 的组件,例如查询参数或片段标识符。它将在 URI 中具有特殊含义的所有字符(包括空格、特殊字符和非 ASCII 字符)编码为它们的 UTF-8 十六进制转义序列。
简而言之,escape
已被弃用,不建议使用。encodeURI
用于编码完整的 URI 或 URL,而 encodeURIComponent
用于编码 URI 或 URL 的特定组件。在选择 encodeURI
和 encodeURIComponent
之间取决于上下文和要编码的具体 URL 部分。
让我们来看一些例子:
escape
的使用示例:
const str = "Hello World!";
const encodedStr = escape(str);
console.log(encodedStr);
// Hello%20World%21
encodeURI
的使用示例:
const uri = "https://www.example.com/p w s/index.html";
const encodedUri = encodeURI(uri);
console.log(encodedUri);
// https://www.example.com/p%20w%20s/index.html
encodeURIComponent
的使用示例:
const param = "Hello World!";
const encodedParam = encodeURIComponent(param);
console.log(encodedParam);
// Hello%20World!
请注意,对于 encodeURI
和 encodeURIComponent
,它们将所有非字母数字字符(除了一些保留字符)进行编码。例如,对于 encodeURI
,保留字符 :/?#[]@!$&'()*+,;=
不会被编码,而对于 encodeURIComponent
,连这些保留字符也会被编码。
这些例子展示了如何使用这些函数来进行 URL 编码。根据具体的需求和上下文,选择适当的函数来确保 URL 的正确编码和处理。
转载自:https://juejin.cn/post/7241730139708424229