返回

探索escape、encodeURI和encodeURIComponent的差异:逐字逐句的实践指南

前端

JavaScript 编码函数:escape、encodeURI 和 encodeURIComponent

什么是编码?

想象一下你在给远方的朋友写信,但你使用的是他看不懂的语言。为了解决这个问题,你需要将信件编码成一种你们都能理解的通用格式。编码就是这个过程,它将人类可读的数据转换成计算机可读的数据格式。

JavaScript 中的编码函数

JavaScript 提供了三个编码函数:escape、encodeURI 和 encodeURIComponent。它们都用于将字符串编码为 URI(统一资源标识符)或 URL(统一资源定位符)的格式。

escape 函数

编码范围:所有非 ASCII 字符

保留字符:无

不编码字符:ASCII 字符

escape 函数将所有非 ASCII 字符(即不在标准英语字符集中的字符)编码为 "%XX" 格式,其中 XX 是该字符的十六进制代码。

示例:

将 "你好" 编码为 escape 格式:

escape("你好") // "%E4%BD%A0%E5%A5%BD"

encodeURI 函数

编码范围:所有非 URI 字符

保留字符:" / ? &"

不编码字符:URI 字符

encodeURI 函数将所有非 URI 字符(即不在 URL 中允许的字符)编码为 "%XX" 格式。URI 字符集包括 ASCII 字符以及一些特殊符号,如 "/"、"?" 和 "&"。

示例:

将 "你好/世界" 编码为 encodeURI 格式:

encodeURI("你好/世界") // "%E4%BD%A0%E5%A5%BD/%E4%B8%96%E7%95%8C"

encodeURIComponent 函数

编码范围:所有非 URI 组件字符

保留字符:" / ? & #"

不编码字符:URI 组件字符

encodeURIComponent 函数将所有非 URI 组件字符(即不在 URL 组件(如参数)中允许的字符)编码为 "%XX" 格式。URI 组件字符集包括 ASCII 字符以及一些特殊符号,如 "/"、"?"、"&" 和 "#"。

示例:

将 "你好/世界" 编码为 encodeURIComponent 格式:

encodeURIComponent("你好/世界") // "%E4%BD%A0%E5%A5%BD%2F%E4%B8%96%E7%95%8C"

函数比较

函数 编码范围 保留字符 不编码字符
escape 所有非 ASCII 字符 ASCII 字符
encodeURI 所有非 URI 字符 "/"、"?"、"&" URI 字符
encodeURIComponent 所有非 URI 组件字符 "/"、"?"、"&"、"#" URI 组件字符

实际应用

  • escape: 对非英语字符进行编码(例如,在表单提交时对中文进行编码)。
  • encodeURI: 对 URL 中的非 URI 字符进行编码(例如,对 URL 中的中文进行编码)。
  • encodeURIComponent: 对 URL 中的非 URI 组件字符进行编码(例如,对 URL 中的参数进行编码)。

总结

escape、encodeURI 和 encodeURIComponent 是 JavaScript 中用于将字符串编码为 URI 或 URL 格式的强大工具。了解它们的差异和应用场景至关重要,这样你才能在开发中有效地使用它们。

常见问题解答

1. 我什么时候应该使用 escape 函数?

在需要对非英语字符进行编码时,请使用 escape 函数。

2. encodeURI 和 encodeURIComponent 之间有什么区别?

encodeURI 用于对 URL 中的非 URI 字符进行编码,而 encodeURIComponent 用于对 URL 中的非 URI 组件字符进行编码。

3. 如何对 URL 进行完整的编码?

先使用 encodeURI 对 URL 进行编码,然后再使用 encodeURIComponent 对参数进行编码。

4. 如何解码编码后的字符串?

使用 decodeURI 和 decodeURIComponent 函数。

5. 除了 JavaScript 之外,还有其他语言提供编码函数吗?

是的,大多数编程语言都提供编码和解码函数。