请说说escape、encodeURI、decodeURI、encodeURIComponent和decodeURIComponent的区别?

这五个函数都是 JavaScript 中用于处理 URI 的函数,但它们的目标和处理范围不同:

1. escape()unescape():

  • escape(): 对字符串进行编码,将非 ASCII 字符转换为 %xx%uxxxx 格式。已废弃,不推荐使用,因为它不能正确处理非 ASCII 字符,特别是 Unicode 字符。它主要用于对 ASCII 字符串进行编码,例如将空格转换为 %20
  • unescape():escape() 编码的字符串进行解码。同样已废弃

2. encodeURI()decodeURI():

  • encodeURI(): 用于编码整个 URI。它会将 URI 中的特殊字符(例如空格、#、? 等)转换为 %xx 格式,但不会编码 URI 的保留字符,例如 : / ? ; = + & @ # 等。目的是对整个 URI 进行编码,以便在浏览器地址栏或链接中使用。
  • decodeURI():encodeURI() 编码的 URI 进行解码。

3. encodeURIComponent()decodeURIComponent():

  • encodeURIComponent(): 用于编码 URI 的组成部分,例如查询参数。它会将所有非字母数字字符(除了 - _ . ! ~ * ' ( ))转换为 %xx 格式,包括保留字符。目的是对 URI 的各个部分进行编码,以便安全地将其作为查询参数或其他 URI 组件使用。
  • decodeURIComponent():encodeURIComponent() 编码的 URI 组件进行解码。

总结与对比:

特性 escape() encodeURI() encodeURIComponent()
目的 编码字符串(已废弃) 编码整个 URI 编码 URI 组件
编码范围 非 ASCII 字符 URI 中的特殊字符,不包括保留字符 所有非字母数字字符,包括保留字符
保留字符 不处理 不编码 编码
示例 escape("你好 世界") -> %u4F60%u597D%20%u4E16%u753B (已废弃) encodeURI("https://www.example.com/你好 世界") -> https://www.example.com/%E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C encodeURIComponent("你好 世界") -> %E4%BD%A0%E5%A5%BD%20%E4%B8%96%E7%95%8C
推荐使用 ✅ 用于编码整个 URI ✅ 用于编码 URI 组件

实际应用场景:

  • 如果你需要编码整个 URI,例如在 <a> 标签的 href 属性中使用,应该使用 encodeURI()
  • 如果你需要编码 URI 的一部分,例如查询参数,应该使用 encodeURIComponent()

强烈建议避免使用escape()unescape(),它们已经过时并且存在编码问题。 使用 encodeURI()encodeURIComponent() 可以更好地处理 Unicode 字符,并提供更可靠的 URI 编码和解码功能。

posted @   王铁柱6  阅读(81)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
点击右上角即可分享
微信分享提示