javascript中編碼與解碼的decodeURI()、decodeURIComponent()區別

一、 定義和用法

 decodeURI() 函數可對 encodeURI() 函數編碼過的 URI 進行解碼。

 decodeURIComponent() 函數可對 encodeURIComponent() 函數編碼的 URI 進行解碼。
 從W3C的定義和用法來看,二者沒有什麼區別,可是二者的參數是有區別的:

 decodeURI(URIstring)        //URIstring    一個字符串,含有要解碼的 URI 或其餘要解碼的文本。

 decodeURIComponent(URIstring)       //URIstring   一個字符串,含有編碼 URI 組件或其餘要解碼的文本。

二、使用中區別

區別:encodeURIComponent和decodeURIComponent能夠編碼和解碼URI特殊字符(如#,/,¥等),而decodeURI則不能。

encodeURIComponent('#')
"%23"
decodeURI('%23')
"%23"
decodeURIComponent('%23')
"#"
encodeURI('#')
"#"
能夠看出encodeURI和decodeURI對URI的特殊字符是沒有編碼和解碼能力的,實際項目中咱們通常須要get請求的方式在地址欄中拼接一些參數,可是參數中若是出現#,/,&這些字符,

就必需要用decodeURIComponent了,

否則這些特殊字符會致使咱們接收參數的錯誤
假如咱們要傳一個code字段到http://www.xxx.com,值爲20180711#abc

var codeVal = encodeURI('20180711#abc');
var url = 'http://www.xxx.com?code=' + codeVal;
console.log(url);
http://www.xxx.com?code=20180711#abc
http://www.xxx.com接收參數

location.search  //"?code=20180711";
decodeURI("?code=20180711")  //"?code=20180711"
這時候咱們拿到的code參數明顯是錯誤的,被特殊字符#截斷了,下面咱們來看用decodeURIComponent方法:

var codeVal = encodeURIComponent('20180711#abc');
var url = 'http://www.baidu.com?code=' + codeVal;
url;
"http://www.baidu.com?code=20180711%23abc"
http://www.xxx.com接收參數
location.search  //"?code=20180711%23abc"
decodeURIComponent("?code=20180711%23abc")  //"?code=20180711#abc"
相關文章
相關標籤/搜索