在回答另一个问题时,我意识到我的 Javascript/DOM 知识已经有点过时了,因为我仍在使用 escape
/unescape
对内容进行编码URL 组件,而现在看来我应该改用 encodeURIComponent
/decodeURIComponent
。
我想知道的是 escape
/unescape
有什么问题?有一些模糊的建议表明 Unicode 字符存在某种问题,但我找不到任何明确的解释。
我的 Web 体验相当偏颇,几乎所有的体验都是在编写与 Internet Explorer 绑定(bind)的大型 Intranet 应用程序。这涉及大量使用 escape
/unescape
并且所涉及的应用程序多年来一直完全支持 Unicode。
那么 escape
/unescape
应该有哪些 Unicode 问题?有没有人有任何测试用例来证明问题?
最佳答案
What I want to know is what is wrong with escape/unescape ?
它们本身并不是“错误”的,它们只是它们自己的特殊字符串格式,看起来有点像 URI 参数编码,但实际上不是。特别是:
- ‘+’表示加号,不是空格
- 有一种特殊的“%uNNNN”格式用于编码 Unicode UTF-16 代码点,而不是编码 UTF-8 字节
因此,如果您使用 escape() 创建 URI 参数值,对于包含加号或任何非 ASCII 字符的字符串,您将得到错误的结果。
escape() 可以用作内部 JavaScript-only 编码方案,例如转义 cookie 值。然而,现在所有浏览器都支持 encodeURIComponent(最初并非如此),没有理由优先使用 escape。
据我所知,escape/unescape 的现代用法只有一种,这是通过在 URIComponent 处理中利用 UTF-8 处理来实现 UTF-8 编码器/解码器的一种快速方法:
utf8bytes= unescape(encodeURIComponent(unicodecharacters));
unicodecharacters= decodeURIComponent(escape(utf8bytes));
关于javascript - decodeURIComponent vs unescape,unescape有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/619323/