1. 程式人生 > >javascript中可用的編碼解碼函式

javascript中可用的編碼解碼函式

在專案實踐中可能會遇到一些特殊字元的轉義問題,那麼這個時候就需要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進行編碼。