1. 程式人生 > >js 裡 escape,encodeURI,encodeURIComponent編碼方法之我見

js 裡 escape,encodeURI,encodeURIComponent編碼方法之我見

string s=escape(data)

解密(.net)

string content = HttpUtility.UrlDecode(s);

規則

escape對0-255以外的unicode值進行編碼時輸出%u****格式,

其它情況下escape,encodeURI,encodeURIComponent編碼結果相同。

不編碼字元
escape不編碼字元有69個:*,+,-,.,/,@,_,0-9,a-z,A-Z

encodeURI不編碼字元有82個:!,#,$,&,',(,),*,+,,,-,.,/,:,;,=,?,@,_,~,0-9,a-z,A-Z

encodeURIComponent不編碼字元有71個:!, ',(,),*,-,.,_,~,0-9,a-z,A-Z

url跳轉時可以整體使用encodeURI

但在多語言情況下,最多使用的應為encodeURIComponent,它是將中文、韓文等特殊字元轉換成utf-8格式的url編碼,所以如果給後臺傳遞引數需要使用encodeURIComponent時需要後臺解碼對utf-8支援(form中的編碼方式和當前頁面編碼方式相同)

HttpUtility.UrlDecode方法預設是以utf-8的方式解碼的,而encodeURIComponent內部實現機制就是先把字元轉換成utf-8型別,再進行的編碼,所以,在不指定任何解碼encoding的情況下,預設針對encodeURIComponent的解碼沒有任何問題

escape 和encodeURIComponent除了有幾個特殊符號在編碼上的區別和編碼方式的區別外,因此專家建議我們用encodeURIComponent取代escape可以應該國際化和多語言問題! 

推薦這樣使用

加密:

string s=encodeURIComponent(data)

解密(.net)

string content = HttpUtility.UrlDecode(s);