blogspot.com-GA4

星期四, 5月 29, 2008

escape,encodeURI,encodeURIComponent

在Javascript若是要傳遞中文參數(Get)的候時,是用函式去做參數的編碼。

以下部分是網路找到的編碼方式:
javascript 中 escape,encodeURI 區別?

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>');</script>

2、   進行url跳轉時可以整體使用encodeURI

例如:Location.href=encodeURI("http://cang.baidu.com/do/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
escape() 方法:
所有空格、標點符號、重音字元,以及任何其他非ASCII字元都編碼改爲"%XX"的形式,xx是16進制數位所代表.
escape和unescape的編碼和解碼功能, escape返回16進制編碼的一種ISO拉丁字元集. unescape的功能將具有特殊值的16進制編碼轉換爲ASCII字串
舉例:
escape('!@#$%^&*(){}[]=:/;?+\'"'):
結果:%21@%23%24%25%5E%26*%28%29%7B%7D%5B%5D%3D%3A/%3B%3F+%27%22

encodeURI() 方法
    Encodeuri方法返回一個編碼後的URI. 因此,如果你將其結果用Decodeuri方法,原始的串會返回. Encodeuri的方法並不對以下字元編碼:":"、"/"、"; "、"? ". 但可以使用 encodeuricomponent 的方法對這些字元進行encode. 
    encodes,一種 Uniform Resource Identifier (URI)(URI)逐一替換某些字元,描述爲UTF-8編碼的特點.
    例如 :
    encodeURI('!@#$%^&*(){}[]=:/;?+\'"'):
    結果:!@#$%25%5E&*()%7B%7D%5B%5D=:/;?+'%22

encodeURIComponent() 方法:
encodeuricomponent 方法返回一個編碼的URI. 因此,如果你將decodeuricomponent,原來的串會返回. 由於所有文字encodesencodeuricomponent方法都會進行編碼,所以要小心,如果存在路徑等串例如: "/FOLDER1/FOLDER2/DEFAULT.HTML". 加密後並不會,如果作爲一個網路服務器的請求將會失效. 使用這種方法Encodeuri當字串超過一個以上URI組成.
    encodes,一種 Uniform Resource Identifier (URI)(URI)逐一替換某些字元,描述爲UTF-8編碼的特點. 
 例子:最簡單的方法就是看它們加密這些字元後生成的代碼.
encodeURIComponent('!@#$%^&*(){}[]=:/;?+\'"'):
結果 !%40%23%24%25%5E%26*()%7B%7D%5B%5D%3D%3A%2F%3B%3F%2B'%22 

什麽時候適合用什麽方法?

escape() 方法不會加密 + 在伺服器端會被解析爲空格以及在表單forms區域中的spaces.基於這樣的縮減方式,你應該盡可能的避免使用這種方法,二選一的話,最好的經常使用 encodeURIComponent().

escape() 不會加密: @*/+

使用encodeURI()  比 escape() 稍專業化,它是針對URIs編碼的 .一個做爲querystring的反面, 屬於URL的一個部分.使用這種方法是當你需要將一個字串轉換爲URIs資源標識以及需要某些字元保持非encode狀態.請記住, 這個' 字元是不會進行編碼的,因爲它本身就包括在URIs裏.

encodeURI()不會加密: !@#$&*()=:/;?+'

最後, encodeURIComponent() 方法用在大多數cases中,當你需要對一個單獨URIs部件進行編碼,這種方法可以加密某些特殊用於的URIs的字元,因此大部分部件可以包含在裏面. 記住, ' 字元本身就包括在URIs裏,所以不會此方法不會對其進行編碼.

encodeURIComponent() 不會加密: !*()'

沒有留言: