方法 | 說明 |
escape() | 使用轉義序列替換某些字符來對字符串進行編碼 |
unescape() | 對使用 escape() 編碼的字符串進行解碼 |
encodeURI() | 通過轉義某些字符對 URI 進行編碼 |
decodeURI() | 對使用 encodeURI() 方法編碼的字符串進行解碼 |
encodeURIComponent() | 通過某些轉義字符對 URI 的組件進行編碼 |
deencodeURIComponent() | 對使用 encodeURIComponent() 方法編碼的字符串進行解碼 |
escape()和unescape()方法
escape() 方法能夠把 ASCII 之外的所有字符轉換為 %xx 或 %uxxxx(x表示十六進制的數字)的轉義序列。從 \u000 到 \u00ff 的 Unicode 字符由轉義序列 %xx 替代,其他所有 Unicode 字符由 %uxxxx 序列替代。
示例1
var s = "JavaScript 中國"; s = escape(s); console.log(s); //返回字符串“JavaScript%u4E2D%u56FD”
可以使用該方法對 Cookie 字符串進行編碼,以避免與其他約定字符發生沖突,因為 Cookie 包含的標點符號是有限制的。
與 escape() 方法對應,unescape() 方法能夠對 escape() 編碼的字符串進行解碼。
示例2
下面代碼使用 unescape() 方法解碼被 escape() 方法解碼的字符串。
var s = "JavaScript 中國"; s = escape(s); //Unicode編碼 console.log(s); //返回字符串“JavaScript%u4E2D%u56FD” s = unescape(s); //Unicode解碼 console.log(s); //返回字符串“JavaScript 中國”
示例3
這種被解碼的代碼是不能夠直接運行的,同學們可以使用 eval() 方法來執行它。
var s = escape('console/log("JavaScript 中國");'); //編碼腳本 var s = unescape(s); //解碼腳本 eval(s); //執行被解碼的腳本
encodeURI() 和 decodeURI() 方法
ECMAScript v3.0 版本推薦使用 encodeURI() 和 encodeURIComponent() 方法代替 escape() 方法,使用 decodeURI() 和 decodeURIComponent() 方法代替 unescape() 方法。
示例4
encodeURI() 方法能夠把 URI 字符串進行轉移處理。
var s = "JavaScript 中國"; s = encodeURI(s); console.log(s); //返回字符串“JavaScript%E4%B8%AD%E5%9B%BD”
encodeURI() 方法與 escape() 方法的編碼結果是不同的,但是它們都不會編碼 ASCII 字符。
相對而言,encodeURI() 方法更佳安全。它能夠將字符轉換為 UTF-8 編碼字符,然后用十六進制的轉義序列(形式為%xx)對生成的 1 字節、2 字節或 4 字節的字符進行編碼。
使用 decodeURI() 方法可以對 encodeURI() 方法的結果進行解碼。
示例5
下面代碼演示了如何對 URL 字符串進行編碼和解碼操作。
var s = "JavaScript 中國"; s = encodeURI(s); //URI編碼 console.log(s); //返回字符串“JavaScript%E4%B8%AD%E5%9B%BD” s = decodeURI(s); //URI解碼 console.log(s); //返回字符串“JavaScript 中國”
encodeURICompoent() 和 decodeURICompoent()
encodeURICompoent() 與 encodeURI() 方法不同。它們的主要區別在於,encodeURICompoent() 方法假定參數是 URI 的一部分,例如,協議、主機名、路徑或查詢字符串。因此,它將轉義用於分隔 URI 各個部分的標點符號。而 encodeURI() 方法僅把它們視為普通的 ASCII 字符,並沒有轉換。
示例6
下面代碼是 URL 字符串被 encodeURICompoent() 方法編碼前后的比較。
var s = "c.biancheng.net/navi/search.asp?keyword=URI"; a = encodeURI(s); console.log(a); b = encodeURICompoent(s); console.log(b);
輸出顯示為:
c.biancheng.net/navi/search.asp?keyword=URI
c.biancheng.net%2Fnavi%2Fsearch.asp%3Fkeyword%3DURI
第一行字符串是 encodeURI() 方法編碼的結果,第二行字符串是 encodeURICompoent() 方法編碼的結果。與 encodeURI() 方法一樣,encodeURICompoent() 方法對於 ASCII 字符不編碼,用於 分隔 URI 各種組件的標點符號,都由一個或多個十六進制的轉義序列替換。
使用 decodeURICompoent() 方法可以對 encodeURICompoent() 方法編碼的結果進行解碼。
var s = "c.biancheng.net/navi/search.asp?keyword=URI"; b = encodeURICompoent(s); b = decodeURICompoent(b); console.log(b);