javascript - decodeURIComponent vs unescape,unescape有什么问题?

标签 javascript encoding escaping dhtml

在回答另一个问题时,我意识到我的 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/

相关文章:

javascript - jstree 禁用复选框

Java Unicode 到可读文本的转换解码

mysql - 从批处理脚本中转义 MYSQL 插入

php - 将数据导出为 .sql 格式。如何逃脱?

python - 如何使用 Python 在 JSON 中的 HTML 标记中关闭 '/'?

javascript - 如何在 html 中显示 sql 查询的结果?

javascript - 当页面滚动到该部分时触发一个js动画

javascript - 从 $resource 自动完成 Angularjs

java - AES javascript加密和Java解密

java : How to determine the correct charset encoding of a stream