JavaScript中escape、encodeURI与encodeURIComponent的区别与应用

作者:小括号

时间:2026-10-22

浏览:592

本文详细解析JavaScript中三种字符串编码函数:escape、encodeURI和encodeURIComponent。重点说明在URL参数传递时应使用encodeURIComponent以确保特殊字符不被截断,整体跳转可使用encodeURI,而局部数据交互可考虑escape。同时列出了各函数保留不编码的字符列表,帮助开发者根据场景选择正确的编码方式。

文章目录

JavaScript编码函数概述

JavaScript处理字符串编码主要涉及三组对应的函数:编码函数包括escape、encodeURI和encodeURIComponent,解码函数则分别为unescape、decodeURI和decodeURIComponent。

不同场景下的编码策略

在构建包含查询参数的URL时,必须使用encodeURIComponent对参数值进行编码。这样可以防止参数中包含#等特殊字符导致URL被意外截断,确保链接结构的完整性。

具体应用场景如下:

当需要将整个URL进行跳转时,可以使用encodeURI对完整链接进行编码。

例如,执行页面跳转的代码可以写为:Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");

如果在JavaScript内部处理数据,不涉及URL传输,可以使用escape进行编码。

典型的例子包括在浏览器历史记录(history)中保存收藏信息时使用。

需要注意的是,当escape处理0-255范围之外的Unicode字符时,会输出%u****格式的编码串;而在其他情况下,escape、encodeURI和encodeURIComponent的编码结果是一致的。

实际开发中使用频率最高的是encodeURIComponent。它会将中文、韩文等非ASCII字符转换为UTF-8格式的URL编码。因此,若通过encodeURIComponent向后端传递参数,需确保后端解码逻辑支持UTF-8编码(即Form提交的编码方式与当前页面编码方式保持一致)。

各函数不编码字符列表

关于escape函数,它不会编码以下69个字符:*,+,-,.,/,@,_,0-9,a-z,A-Z。

关于encodeURI函数,它不会编码以下82个字符:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z。

关于encodeURIComponent函数,它不会编码以下71个字符:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z。

关于escape、encodeURI和encodeURIComponent三者区别的详细对比,可参考相关技术文章:javascript 字符 Escape,encodeURI,encodeURIComponent。

以上内容涵盖了JavaScript编码函数的核心知识点,旨在帮助开发者在编程工作中正确选择编码策略。希望这些信息能为您提供帮助,欢迎继续支持本站获取更多技术资源。

实用工具推荐

电子包浆

绿化、压缩、噪点和虚拟水印,自由调节做旧程度。

使用 ›
图片压缩

选择画质和输出格式,预览压缩前后的大小。

使用 ›
相关文章