javascript中可用的編碼解碼函式
阿新 • • 發佈:2018-11-07
在專案實踐中可能會遇到一些特殊字元的轉義問題,那麼這個時候就需要js編碼解碼函式來解決這些情況了:
特殊字元的含義
URL編碼
符號 | 解釋 | 轉義 |
# | 用來標誌特定的文件位置 | %23 |
% | 對特殊字元進行編碼 | %25 |
& | 分隔不同的變數值對 | %26 |
+ | 在變數值中表示空格 | %2B |
/ | 表示目錄路徑 | %2F |
\ |
表示目錄路徑 | %5C |
= | 用來連線鍵和值 | %3D |
? | 表示查詢字串的開始 | %3F |
空格 | 空格 | %20 |
. | 句號 | %2E |
: | 冒號 | %3A |
javascript中可用的編碼解碼函式,有如下的組合: escape(string); unescape(string); encodeURI(string); decodeURI(string); encodeURIComponent(string); decodeURIComponent(string);
他們之間的區別為:
escape/unescape:
以16進位制編碼字串,對空格、符號等字元用%xx編碼表示,對中文等字元用%uxxxx編碼表示。自javascript1.5之後,此方法已經不被推薦使用。
encodeURI/decodeURI:
以UTF-8編碼編碼字串,對這些字元:“ ; , / ? : @ & = + $ ”不做編碼。
encodeURIComponent/decodeURIComponent:
以UTF-8編碼編碼所有字串。
因為escape/unescape已經deprecated。就不說它了,encodeURI和encodeURIComponent之前的區別用例項說明:
比如說要使用get方式將一個引數u,傳遞給伺服器:
var u="index.php?blogId=1&op=Default";var getURL="http://www.simplelife.cn/test.php?p="+encodeURI(u);
這裡,如果使用了encodeURI,那麼最終的getURL的值為:
http://www.simplelife.cn/test.php?p=index.php?blogId=1&op=Default
這樣,對引數u中的字元"&op=Default",將不會作為字串引數傳遞到伺服器端,而是當作test.php的引數傳遞過去了,因為對"&op=Default"中的字元"&"沒有做編碼。
所以,在這種應用場景下,就需要使用encodeURIComponent,編碼後的getURL值為:
http://www.simplelife.cn/test.php?p=index.php%3FblogId%3D1%26op%3DDefault
這樣,引數就可以順利傳遞過去了。在伺服器端得到的字串將是正確的u。
反之,如果需要通過get方式訪問某一URL,但是URL中包含中文等字元,為了防止亂碼等編碼問題,需要將URL通過encodeURI進行編碼。
比如說要使用get方式將一個引數u,傳遞給伺服器:
var u="index.php?blogId=1&op=Default";var getURL="http://www.simplelife.cn/test.php?p="+encodeURI(u);
這裡,如果使用了encodeURI,那麼最終的getURL的值為:
http://www.simplelife.cn/test.php?p=index.php?blogId=1&op=Default
這樣,對引數u中的字元"&op=Default",將不會作為字串引數傳遞到伺服器端,而是當作test.php的引數傳遞過去了,因為對"&op=Default"中的字元"&"沒有做編碼。
所以,在這種應用場景下,就需要使用encodeURIComponent,編碼後的getURL值為:
http://www.simplelife.cn/test.php?p=index.php%3FblogId%3D1%26op%3DDefault
這樣,引數就可以順利傳遞過去了。在伺服器端得到的字串將是正確的u。
反之,如果需要通過get方式訪問某一URL,但是URL中包含中文等字元,為了防止亂碼等編碼問題,需要將URL通過encodeURI進行編碼。