前幾天遇到url特殊字符編碼的問題,在這里整理一下:
JavaScript
1. 編碼 escape(String)
其中某些字符被替換成了十六進制的轉義序列。
解碼 unescape(String)
該函數的工作原理是這樣的:通過找到形式為 %xx 和 %uxxxx 的字符序列(x 表示十六進制的數字),用 Unicode 字符 \u00xx 和 \uxxxx 替換這樣的字符序列進行解碼。
*注釋:ECMAScript v3 反對使用該方法,應用使用 decodeURI() 和 decodeURIComponent() 替代它。
2. 編碼 encodeURI(URIstring)
返回值:URIstring 的副本,其中的某些字符將被十六進制的轉義序列進行替換。
*如果 URI 組件中含有分隔符,比如 ? 和 #,則應當使用 encodeURIComponent() 方法分別對各組件進行編碼。
解碼 decodeURI(URIstring)
返回值:URIstring 的副本,其中的十六進制轉義序列將被它們表示的字符替換。
3. 編碼 encodeURIComponent(URIstring)
返回值:URIstring 的副本,其中的某些字符將被十六進制的轉義序列進行替換。
解碼 decodeURIComponent(URIstring)
返回值:URIstring 的副本,其中的十六進制轉義序列將被它們表示的字符替換。
*encodeURIcomponent() 與 encodeURI() 區別
encodeURIComponent(URIstring) : 假定其參數是URI一部分(比如協議、主機名、路徑或查詢字符串),因此 encodeURIComponent() 函數將轉義用於分隔 URI 各個部分的標點符號(? # 等)。
encodeURI(URIstring) : 不會對URI中的分隔符編碼,如 ? # 等。
Java
編碼: Class URLEncoder
static String encode(String s); static String encode(String s, String enc);//enc 編碼方式 推薦使用UTF-8
解碼: Class URLDecoder
static String decode(String s); static String decode(String s, String enc);//enc 編碼方式 推薦使用UTF-8
* Java中的編碼解碼方式和JS中的encodeURIComponent()/decodeURIComponent()方法是前后台通用的;兩者在處理字符串的方式是沒有區別的;