Escape 编码/解码
URL 百分号编码与 escape 转义互转
Escape 编码的作用与它已过时的原因
Escape 转义做了什么
escape() 是早期 JavaScript 的函数,把字符转成 %XX 或 %uXXXX 形式。关键区别在于:它按 UTF-16 码元处理,而不是按 UTF-8 字节。所以一个汉字会被写成 %u4E2D 这样的单个 %u 序列,而不是 3 个 %E4%B8%AD。
为什么它已经不该用了
- 不被任何标准认可。
%uXXXX这种形式不在 URL 规范、也不在 ECMAScript 规范里,只是早期浏览器实现的遗留行为。其他语言的标准库不认这个格式。 - 它漏掉了一些该编的字符。像
@、*、+、/在escape()下不被转义,但这几个在 URL 里都有特殊含义。 - 已有标准替代。
encodeURIComponent按 UTF-8 字节编码,跨语言互通,是唯一正确的选择。
ECMAScript 规范已把 escape 标记为过时(Annex B,仅为兼容旧网页保留),实现可以移除它。
那还有什么场景需要它
主要是处理历史数据:老系统、老日志、老 CMS 导出的 URL 里会残留 %uXXXX 形式的编码;一些 2000 年代中期的前端框架把 escape() 的输出写进了数据库。解析这类数据时需要能还原它,这也是本工具保留这个功能的原因。
需要编码新数据时,请用 URL 编码工具走 encodeURIComponent 规则。工具会并行显示两套结果,方便你对照确认手上的字符串属于哪一种。
常见问题
escape 不是已经废弃了吗?
是的,新代码应使用 encodeURIComponent。这里保留是为了处理历史系统的遗留数据。