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"