查看文章
 
escape,encodeURI,encodeURIComponent函数比较
2010-03-03 22:43

js对文字进行编码涉及3个函数:escape,encodeURI,encodeURIComponent,相应3个解码函数:unescape,decodeURI,decodeURIComponent
1、传递参数时需要使用encodeURIComponent,这样组合的url才不会被#等特殊字符截断。
例如:
<script language="javascript">document.write('<a href="http://passport.baidu.com/?logout&aid=7& u='+encodeURIComponent("http://cang.baidu.com/bruce42")+'">退出</a& gt;');</script>
2、进行url跳转时可以整体使用encodeURI
例如: Location.href=encodeURI(http://cang.baidu.com/do/s?word=中国asp之家&ct=21);
3、js使用数据时可以使用escape
例如:搜藏history纪录。
4、escape对0-255以外的unicode值进行编码时输出%u****格式,其它情况下escape,encodeURI,encodeURIComponent编码结果相同。
最多使用的应为encodeURIComponent,它是将中文、韩文等特殊字符转换成utf-8格式的url编码,所以如果给后台传递参数需要使用encodeURIComponent时需要后台解码对utf-8支持(form中的编码方式和当前页面编码方式相同)(中国asp之家注:就是说如果你的页面编码是gb2312的话,服务器端接收的将是乱码)
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 方法
对 String 对象编码以便它们能在所有计算机上可读,
escape(charString)
必选项 charstring 参数是要编码的任意 String 对象或文字。
说明
escape 方法返回一个包含了 charstring 内容的字符串值( Unicode 格式)。所有空格、标点、重音符号以及其他非 ASCII 字符都用 %xx 编码代替,其中 xx 等于表示该字符的十六进制数。例如,空格返回的是 "%20" 。
字符值大于 255 的以 %uxxxx 格式存储。
注意escape 方法不能够用来对统一资源标示码 (URI) 进行编码。对其编码应使用 encodeURI 和encodeURIComponent 方法。
encodeURI 方法
将文本字符串编码为一个有效的统一资源标识符 (URI)。
encodeURI(URIString)
必选的 URIString 参数代表一个已编码的 URI。
说明
encodeURI 方法返回一个编码的 URI。如果您将编码结果传递给 decodeURI,那么将返回初始的字符串。encodeURI 方法不会对下列字符进行编码:":"、"/"、";" 和 "?"。请使用 encodeURIComponent 方法对这些字符进行编码。
encodeURIComponent 方法
将文本字符串编码为一个统一资源标识符 (URI) 的一个有效组件。
encodeURIComponent(encodedURIString)
必选的 encodedURIString 参数代表一个已编码的 URI 组件。
说明
encodeURIComponent 方法返回一个已编码的 URI。如果您将编码结果传递给 decodeURIComponent,那么将返回初始的字符串。因为 encodeURIComponent 方法对所有的字符编码,请注意,如果该字符串代表一个路径,例如 /folder1/folder2/default.html,其中的斜杠也将被编码。这样一来,当该编码结果被作为请求发送到 web 服务器时将是无效的。如果字符串中包含不止一个 URI 组件,请使用 encodeURI 方法进行

  1. escape()方法:
  2. 采用ISOLatin字符集对指定的字符串进行编码。所有的空格符、标点符号、特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字)。比如,空格符对应的编码是%20。unescape方法与此相反。不会被此方法编码的字符:@*/+
  3. 英文解释:MSDNJScriptReference:Theescapemethodreturnsastringvalue(inUnicodeformat)thatcontainsthecontentsof[theargument].Allspaces,punctuation,accentedcharacters,andanyothernon-ASCIIcharactersarereplacedwith%xxencoding,wherexxisequivalenttothehexadecimalnumberrepresentingthecharacter.Forexample,aspaceisreturnedas"%20."
  4. EdgeCoreJavascriptGuide:Theescapeandunescapefunctionsletyouencodeanddecodestrings.TheescapefunctionreturnsthehexadecimalencodingofanargumentintheISOLatincharacterset.TheunescapefunctionreturnstheASCIIstringforthespecifiedhexadecimalencodingvalue.
  5. encodeURI()方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。不会被此方法编码的字符:!@#$&*()=:/;?+'
  6. 英文解释:MSDNJScriptReference:TheencodeURImethodreturnsanencodedURI.IfyoupasstheresulttodecodeURI,theoriginalstringisreturned.TheencodeURImethoddoesnotencodethefollowingcharacters:":","/",";",and"?".UseencodeURIComponenttoencodethesecharacters.EdgeCoreJavascriptGuide:EncodesaUniformResourceIdentifier(URI)byreplacingeachinstanceofcertaincharactersbyone,two,orthreeescapesequencesrepresentingtheUTF-8encodingofthecharacter
  7. encodeURIComponent()方法:把URI字符串采用UTF-8编码格式转化成escape格式的字符串。与encodeURI()相比,这个方法将对更多的字符进行编码,比如/等字符。所以如果字符串里面包含了URI的几个部分的话,不能用这个方法来进行编码,否则/字符被编码之后URL将显示错误。不会被此方法编码的字符:!*()
  8. 英文解释:MSDNJScriptReference:TheencodeURIComponentmethodreturnsanencodedURI.IfyoupasstheresulttodecodeURIComponent,theoriginalstringisreturned.BecausetheencodeURIComponentmethodencodesallcharacters,becarefulifthestringrepresentsapathsuchas/folder1/folder2/default.html.Theslashcharacterswillbeencodedandwillnotbevalidifsentasarequesttoawebserver.UsetheencodeURImethodifthestringcontainsmorethanasingleURIcomponent.MozillaDeveloperCoreJavascriptGuide:EncodesaUniformResourceIdentifier(URI)componentbyreplacingeachinstanceofcertaincharactersbyone,two,orthreeescapesequencesrepresentingtheUTF-8encodingofthecharacter.
  9. 引用内容
  10. 因此,对于中文字符串来说,如果不希望把字符串编码格式转化成UTF-8格式的(比如原页面和目标页面的charset是一致的时候),只需要使用escape。如果你的页面是GB2312或者其他的编码,而接受参数的页面是UTF-8编码的,就要采用encodeURI或者encodeURIComponent。
  11. 另外,encodeURI/encodeURIComponent是在javascript1.5之后引进的,escape则在javascript1.0版本就有。
  12. 英文注释:Theescape()methoddoesnotencodethe+characterwhichisinterpretedasaspaceontheserversideaswellasgeneratedbyformswithspacesintheirfields.Duetothisshortcoming,youshouldavoiduseofescape()wheneverpossible.ThebestalternativeisusuallyencodeURIComponent().UseoftheencodeURI()methodisabitmorespecializedthanescape()inthatitencodesforURIs[REF]asopposedtothequerystring,whichispartofaURL.UsethismethodwhenyouneedtoencodeastringtobeusedforanyresourcethatusesURIsandneedscertaincharacterstoremainun-encoded.Notethatthismethoddoesnotencodethe'character,asitisavalidcharacterwithinURIs.Lastly,theencodeURIComponent()methodshouldbeusedinmostcaseswhenencodingasinglecomponentofaURI.ThismethodwillencodecertaincharsthatwouldnormallyberecognizedasspecialcharsforURIssothatmanycomponentsmaybeincluded

类别:程序设计||添加到搜藏 |分享到i贴吧|浏览(157)|评论 (0)
 
最近读者:
 
网友评论:
发表评论:
姓 名:
网址或邮箱: (选填)
内 容:
     

   
帮助中心 | 空间客服 | 投诉中心 | 空间协议
©2012 Baidu