JS中三种URI编码方式对比分析

作者:木棉时间:2026-10-31 10:02:11浏览:265

本文对比分析了JavaScript中三种URI编码方法:escape、encodeURI和encodeURIComponent。通过实例演示了各自的编码结果,详细列出了各方法不编码的字符列表,并指出escape已被ECMAScript v3废弃。文章推荐在传递URL参数时使用encodeURIComponent,整体跳转时使用encodeURI,以确保URL结构的完整性与安全性。

一、实例比较

在数据传递过程中,通常需要对数据进行编码,接收端再进行解码。首先定义一个测试用的url变量:

var url = "https://www.cnblogs.com/?username='小森森'&password='666666'";

escape 与 unescape

console.log(escape(url));// 编码
console.log(unescape(escape(url)));// 解码

结果:

https%3A//www.cnblogs.com/%3Fusername%3D%27%u5C0F%u68EE%u68EE%27%26password%3D%27666666%27

encodeURIComponent 与 decodeURIComponent (推荐)

console.log(encodeURIComponent(url));// 编码
console.log(decodeURIComponent(encodeURIComponent(url)));// 解码

结果:

https%3A%2F%2Fwww.cnblogs.com%2F%3Fusername%3D'%E5%B0%8F%E6%A3%AE%E6%A3%AE'%26password%3D'666666'

encodeURI 与 decodeURI

console.log(encodeURI(url));// 编码
console.log(decodeURI(encodeURI(url)));// 解码

结果:

https://www.cnblogs.com/?username='%E5%B0%8F%E6%A3%AE%E6%A3%AE'&password='666666'

二、区别分析

这三种方法都不会对ASCII字母、数字以及规定的特殊ASCII标点符号进行编码,其余字符会被替换为十六进制转义序列。

escape 与 unescape

escape函数不编码的字符共有69个:*,+,-,.,/,@,_,0-9,a-z,A-Z

该方法会对字符串进行全部转义编码。ECMAScript v3标准已反对使用此方法,因此在对URL进行编码时,请勿使用此方法。

encodeURIComponent 与 decodeURIComponent

encodeURIComponent函数不编码的字符共有71个:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

在传递参数时,需使用encodeURIComponent,这样组合后的URL才不会被#等特殊字符截断。

encodeURI 与 decodeURI

encodeURI函数不编码的字符共有82个:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

在进行URL跳转时,可以整体使用encodeURI。如果URI中包含分隔符如?和#,则应使用encodeURIComponent。

三、结论

推荐使用encodeURIComponent

到此这篇关于JS中三种URI编码方式比较的文章就介绍到这了,更多相关js URI编码内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

作者最新文章