decodeURIComponent 与 unescape,unescape 有什么问题?

2024-04-21

在回答另一个问题时,我意识到我的 Javascript/DOM 知识已经有点过时了,因为我仍在使用escape/unescape对 URL 组件的内容进行编码,而看起来我现在应该使用encodeURIComponent/decodeURIComponent反而。

我想知道的是哪里出了问题escape/unescape?有一些模糊的建议表明 Unicode 字符存在某种问题,但我找不到任何明确的解释。

我的网络经验相当偏颇,几乎所有经验都是编写与 Internet Explorer 相关的大型 Intranet 应用程序。这涉及到很多使用escape/unescape所涉及的应用程序多年来一直完全支持 Unicode。

那么 Unicode 问题是什么?escape/unescape应该有?有人有任何测试用例来证明这些问题吗?


我想知道 escape/unescape 有什么问题?

它们本身并没有“错误”,它们只是它们自己的特殊字符串格式,看起来有点像 URI 参数编码,但实际上并非如此。尤其:

  • ‘+’表示加号,而不是空格
  • 有一种特殊的“%uNNNN”格式用于编码 Unicode UTF-16 代码点,而不是编码 UTF-8 字节

因此,如果您使用 escape() 创建 URI 参数值,则对于包含加号或任何非 ASCII 字符的字符串,您将得到错误的结果。

escape() 可以用作内部纯 JavaScript 编码方案,例如转义 cookie 值。然而现在所有浏览器都支持encodeURIComponent(最初并非如此),没有理由优先使用转义。

据我所知,escape/unescape 只有一种现代用途,那就是通过利用 URIComponent 处理中的 UTF-8 处理来实现 UTF-8 编码器/解码器的快速方法:

utf8bytes= unescape(encodeURIComponent(unicodecharacters));
unicodecharacters= decodeURIComponent(escape(utf8bytes));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

decodeURIComponent 与 unescape,unescape 有什么问题? 的相关文章

随机推荐