在回答另一个问题时,我意识到我的Javascript/DOM知识已经过时了,因为我仍在使用escape
/unescape
对URL组件的内容进行编码,而现在看来我应该使用encodeURIComponent
/decodeURIComponent
代替。
我想知道escape
/unescape
有什么问题吗?有一些模糊的建议,认为围绕Unicode字符存在某种问题,但我找不到明确的解释。
我的网络体验颇有偏见,几乎所有内容都在编写与Internet Explorer绑定(bind)的大型Intranet应用程序。这涉及到escape
/unescape
的大量使用,并且涉及的应用程序多年来已经完全支持Unicode。
那么escape
/unescape
应该具有哪些Unicode问题?有人有测试用例来证明问题吗?
最佳答案
它们并不是“错误的”,它们只是它们自己的特殊字符串格式,看起来有点像URI参数编码,但实际上不是。特别是:
因此,如果使用escape()创建URI参数值,则对于包含加号或任何非ASCII字符的字符串,您将得到错误的结果。
escape()可用作内部纯JavaScript编码方案,例如,以转义cookie值。但是,既然所有浏览器都支持encodeURIComponent(本来就不是这种情况),则没有理由优先使用转义。
我知道转义/转义只有一种现代用途,这是通过利用URIComponent处理中的UTF-8处理来实现UTF-8编码器/解码器的快速方法:
utf8bytes= unescape(encodeURIComponent(unicodecharacters));
unicodecharacters= decodeURIComponent(escape(utf8bytes));