在咱們調用後臺接口的時候,若是後端傳過來的字段是編碼過的,那須要使用decodeURIComponent函數進行解碼顯示後端
var test1="http://www.jianshu.com/u/2e03543a7d61"函數
console.log(encodeURIComponent(test1));//編碼
console.log(decodeURIComponent(test1));//解碼編碼
結果輸出:
http%3A%2F%2Fwww.jianshu.com%2Fu%2F2e03543a7d61
http://www.jianshu.com/u/2e03543a7d61url
除此以外,在js中還有另外2種進行編解碼的方法escape,encodeURI,對應的解碼函數unescape,decodeURI,區別以下:
一、 傳遞參數時須要使用encodeURIComponent,這樣組合的url纔不會被#等特殊字符截斷。code
例如:orm
二、 進行url跳轉時能夠總體使用encodeURI
例如:Location.href=encodeURI(http://cang.baidu.com/do/s?word=百度&ct=21);接口
三、 js使用數據時可使用escape
例如:蒐藏中history紀錄。utf-8
四、 escape對0-255之外的unicode值進行編碼時輸出%u****格式,其它狀況下escape,encodeURI,encodeURIComponent編碼結果相同。unicode
最多使用的應爲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
總結: 經過對三個函數的分析,咱們能夠知道:escape()除了 ASCII 字母、數字和特定的符號外,對傳進來的字符串所有進行轉義編碼,所以若是想對URL編碼,最好不要使用此方法。而encodeURI() 用於編碼整個URI,由於URI中的合法字符都不會被編碼轉換。encodeURIComponent方法在編碼單個URIComponent(指請求參數)應當是最經常使用的,它能夠講參數中的中文、特殊字符進行轉義,而不會影響整個URL。