本文详细解析JavaScript中三种URL编码函数的区别,重点介绍encodeURIComponent在参数传递中的应用,以及encodeURI在完整URL跳转时的使用场景,并对比escape函数的局限性,帮助开发者正确处理特殊字符与UTF-8编码。
JavaScript URL编码函数概述
由于需要开发新系统,我对JavaScript脚本进行了重新梳理。在研究新的URL编码方式时,发现网页编码格式对JS的影响显著,特此记录相关要点。
{var B=siteUrl+this.actionUrl+(this.type==="all"?"":this.type)+"&SearchWord="+encodeURIComponent(A).replace(/'/g,"%27");$redirect(B)}}
在开发过程中,我注意到传输的数据包编码均为UTF-8格式。即使修正了网页编码,问题仍未解决,最终将编码方式改为解码方式后才得以处理。
JavaScript中涉及文字编码的函数有三个:escape、encodeURI和encodeURIComponent;对应的解码函数分别为:unescape、decodeURI和decodeURIComponent。
encodeURIComponent与encodeURI的应用场景
1、在传递参数时,应使用encodeURIComponent,这样可以确保组合的URL不会被#等特殊字符截断。
例如:
2、在进行URL整体跳转时,可以使用encodeURI。
例如:Location.href="/encodeURI"("https://www.jb51.net/s?word=百度&ct=21");
3、在JS内部使用数据时,可以使用escape。
例如:用于收藏中的history记录。
4、当escape对0-255以外的Unicode值进行编码时,会输出%u****格式;在其他情况下,escape、encodeURI和encodeURIComponent的编码结果相同。
最常用的是encodeURIComponent,它将中文、韩文等特殊字符转换为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。