JavaScript 中 URL 编码与解码方法的对比及适用场景

作者:青柠时间:2026-10-24 14:12:53浏览:182

本文详解JavaScript中三种主要的字符串编码方法:escape、encodeURI和encodeURIComponent。重点分析它们在处理特殊字符、Unicode值及UTF-8格式时的差异,并明确各自在URL参数传递、页面跳转及本地数据存储中的最佳实践。同时对比了解码方法unescape、decodeURI和decodeURIComponent的使用规范与注意事项。

JavaScript URL编码方法对比与使用场景

在构建包含参数的URL时,必须使用encodeURIComponent对参数值进行编码。这能确保生成的URL不会被#等特殊字符意外截断,从而保证链接的完整性。



例如,在JavaScript中动态生成退出链接时,可以使用如下代码: <script language="javascript"> document.write('<a href="http://passport.baidu.com/?logout&aid=7&u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a>'); </script>



当进行整个URL的跳转操作时,可以使用encodeURI对完整URL进行编码。这种方式适用于处理包含中文或特殊字符的完整地址,而无需手动处理各个参数。



例如,通过Location.href进行页面跳转时,可以这样写: Location.href=encodeURI("http://cang.baidu.com/do/s?word=百度&ct=21");



在JavaScript内部处理数据(如历史记录存储)时,可以使用escape方法。这种方法主要用于非URL场景下的简单字符串编码。



一个典型的应用场景是保存浏览器的历史记录(history记录),此时使用escape进行编码较为常见。



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



在实际开发中,使用频率最高的是encodeURIComponent。它专门将中文、韩文等特殊字符转换为UTF-8格式的URL编码。因此,若向后端传递参数,需确保后端服务器支持对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。



========================================================

JavaScript 解码方法详解

unescape 方法



该方法用于从经escape编码的String对象中返回已解码的原始字符串。



function unescape(charString : String) : String




参数



charString



必选参数,表示需要解码的String对象或文本字符串。



备注



unescape方法返回一个包含charstring内容的字符串值。所有以%xx十六进制形式编码的字符,都会被替换为ASCII字符集中对应的等效字符。以%uxxxx格式(Unicode字符)编码的字符,则用十六进制编码xxxx的Unicode字符代替。需要注意的是,unescape方法不应用于解码“统一资源标识符”(URI),解码URI时应改用decodeURI和decodeURIComponent方法。



decodeURI 方法



该方法返回一个已编码的统一资源标识符 (URI) 的非编码形式,即解码后的完整URI字符串。



function decodeURI(URIstring : String) : String



参数



URIstring



必选参数,表示一个已被编码的URI字符串。



备注



建议在使用decodeURI方法代替已过时的unescape方法。



decodeURI方法返回一个字符串值。



如果传入的URIString无效,系统将抛出URIError异常。



decodeURIComponent 方法



该方法返回统一资源标识符 (URI) 的一个已编码组件的非编码形式,即解码后的URI组件字符串。



function decodeURIComponent(encodedURIString : String) : String



必选的encodedURIString参数是一个表示已编码的URI组件值的字符串。



备注



URIComponent指的是完整URI的一部分,通常用于处理URL中的特定参数组件。

作者最新文章