灏天阁

escape、encodeURI、encodeURIComponent 的区别

· Yin灏

escapeencodeURIencodeURIComponent 是 JavaScript 中用于编码和处理 URL 或 URI 组件的函数。尽管它们的目的相似,但在字符编码方面存在一些差异。以下是它们之间的区别:

  1. escapeescape 函数用于将字符串编码为 URL 编码格式,包括非 ASCII 字符。它会用十六进制转义序列替换某些字符。然而,escape 函数有一些限制,并且已被认为是不推荐使用的,建议使用 encodeURIencodeURIComponent
  2. encodeURIencodeURI 函数用于编码完整的 URI 或 URL。它将不允许在 URI 中使用的字符(如空格、特殊字符和非 ASCII 字符)编码为它们的 UTF-8 十六进制转义序列。但是,它不会编码在 URI 中具有特殊含义的字符,如冒号(:)或斜杠(/)。
  3. encodeURIComponentencodeURIComponent 函数用于编码 URI 或 URL 的组件,例如查询参数或片段标识符。它将在 URI 中具有特殊含义的所有字符(包括空格、特殊字符和非 ASCII 字符)编码为它们的 UTF-8 十六进制转义序列。

简而言之,escape 已被弃用,不建议使用。encodeURI 用于编码完整的 URI 或 URL,而 encodeURIComponent 用于编码 URI 或 URL 的特定组件。在选择 encodeURIencodeURIComponent 之间取决于上下文和要编码的具体 URL 部分。

让我们来看一些例子:

  1. escape 的使用示例:
const str = "Hello World!";

const encodedStr = escape(str);
console.log(encodedStr);
// Hello%20World%21
  1. 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
  1. encodeURIComponent 的使用示例:
const param = "Hello World!";

const encodedParam = encodeURIComponent(param);
console.log(encodedParam);
// Hello%20World!

请注意,对于 encodeURIencodeURIComponent,它们将所有非字母数字字符(除了一些保留字符)进行编码。例如,对于 encodeURI,保留字符 :/?#[]@!$&'()*+,;=不会被编码,而对于 encodeURIComponent,连这些保留字符也会被编码。

这些例子展示了如何使用这些函数来进行 URL 编码。根据具体的需求和上下文,选择适当的函数来确保 URL 的正确编码和处理。

- Book Lists -