escape、encodeURI、encodeURIComponent三个函数比较

JavaScript中escape、encodeURI、encodeURIComponent三个函数都具有的编码的功能,并对应的定义了三个解码函数unescape、decodeURI、decodeURIComponent,它们有什么不同呢?综合书上讲的和网上搜索主要为以下三点:

1.编码格式:encodeURI和encodeURIComponent都是采用UTF-8,而escape是采用Unicode;
2.不编码的范围:三个函数都不对[a-z]、[A-Z]、[0-9]进行编码,除此之外,escape还不对"@*_+-.\"进行编码;encodeURI还不对"-_.!~*'();/?:@&=+$,#"进行编码;encodeURIComponent还不对"-_.!~*'()"进行编码,可见escape不编码的字符最少(69个),encodeURIComponent其次(71个),encodeURI最多(82个);
3.使用场合:如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape;如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。

《JavaScript 权威指南》第四版中建议最好不要用escape而用encodeURIComponent或encodeURI,或许在js to js场合下应该这么做,但我好几次在js to asp/.net(UTF-8传参到GB2312)场合下都是用escape来解决问题的,你会发现它比encodeURIComponent或encodeURI简单得多,使用escape,asp/.net直接用request,不需要再进行其它编码转换工作!

评论: 0 | 引用: 0 | 查看次数: 3960
发表评论
登录后再发表评论!