js 中編碼和解碼的三種方法

2021-08-28 13:43:19 字數 2760 閱讀 1877

js對文字進行編碼涉及3個函式:escape,encodeuri,encodeuricomponent,相應3個解碼函式:unescape,decodeuri,decodeuricomponent,它們的區別如下:

1 escape()函式

定義和用法 

escape() 函式可對字串進行編碼,這樣就可以在所有的計算機上讀取該字串。

語法 escape(string)

引數  描述  

string  必需。要被轉義或編碼的字串。 

返回值 

已編碼的 string 的副本。其中某些字元被替換成了十六進製制的轉義序列。

說明 該方法不會對 ascii 字母和數字進行編碼,也不會對下面這些 ascii 標點符號進行編碼: - _ . ! ~ * ' ( ) 。其他所有的字元都會被轉義序列替換。

2 encodeuri()函式

定義和用法 

encodeuri() 函式可把字串作為 uri 進行編碼。

語法 encodeuri(uristring)

引數  描述  

uristring  必需。乙個字串,含有 uri 或其他要編碼的文字。 

返回值 

uristring 的副本,其中的某些字元將被十六進製制的轉義序列進行替換。

說明 該方法不會對 ascii 字母和數字進行編碼,也不會對這些 ascii 標點符號進行編碼: - _ . ! ~ * ' ( ) 。

該方法的目的是對 uri 進行完整的編碼,因此對以下在 uri 中具有特殊含義的 ascii 標點符號,encodeuri() 函式是不會進行轉義的:;/?:@&=+$,#

3 encodeuricomponent() 函式

定義和用法 

encodeuricomponent() 函式可把字串作為 uri 元件進行編碼。

語法 encodeuricomponent(uristring)

引數  描述  

uristring  必需。乙個字串,含有 uri 元件或其他要編碼的文字。 

返回值 

uristring 的副本,其中的某些字元將被十六進製制的轉義序列進行替換。

說明 該方法不會對 ascii 字母和數字進行編碼,也不會對這些 ascii 標點符號進行編碼: - _ . ! ~ * ' ( ) 。

其他字元(比如 :;/?:@&=+$,# 這些用於分隔 uri 元件的標點符號),都是由乙個或多個十六進製制的轉義序列替換的。

4 總結:

通過對三個函式的分析,我們可以知道:escape()除了 ascii 字母、數字和特定的符號外,對傳進來的字串全部進行轉義編碼,因此如果想對url編碼,最好不要使用此方法。而encodeuri() 用於編碼整個uri,因為uri中的合法字元都不會被編碼轉換。encodeuricomponent方法在編碼單個uricomponent(指請求引數)應當是最常用的,它可以講引數中的中文、特殊字元進行轉義,而不會影響整個url。

1、   傳遞引數時需要使用encodeuricomponent,這樣組合的url才不會被#等特殊字元截斷。                            

例如:

2、   進行url跳轉時可以整體使用encodeuri

3、   js使用資料時可以使用escape

例如:蒐藏中history紀錄。

4、   escape對0-255以外的unicode值進行編碼時輸出%u****格式,其它情況下escape,encodeuri,encodeuricomponent編碼結果相同。

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

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

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

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

示例(摘自w3school):

1 escape()

輸出結果:

visit%20w3school%21

%3f%21%3d%28%29%23%25%26

2 encodeuri()

輸出結果:

/my%20first/

,/?:@&=+$#

對整個url進行編碼,而url的特定識別符號不會被轉碼。

3  encodeuricomponent()

例1:

輸出結果:

對url中的引數進行編碼,因為引數也是乙個url,如果不編碼會影響整個url的跳轉。

JS 三種URI編碼 解碼方式比較

資料傳遞常需要編碼後傳遞,接收還需反編譯,定義url var url cs逍遙劍仙 password 19931128 console.log escape url 編碼 console.log unescape escape url 解碼結果 27console.log encodeuricomp...

js的三種方法型別

1 js的三種方法型別?1.1 物件方法 如果類生成了乙個例項,那麼該例項就可以使用該方法 function person name 1.2 類方法 無需通過生成例項而可以直接使用方法 function person name 1.3 原型方法 原型方法主要是對js已有的物件進行擴充套件 詳見dem...

js中建立物件的三種方法

方法一 直接建立物件 var dog console.log dog.age console.log dog.uname console.log dog type dog.saywang 方法二 使用new object建立,屬性和方法使用 新增。var obg newobject obg.unam...