js encodeURI 和 encodeURIComponent 的區(qū)別
一、共同點
-
把字符串作為 URI 進行編碼
-
方法不會對 ASCII 字母和數(shù)字進行編碼,也不會對這些 ASCII 標點符號進行編碼: - _ . ! ~ * ' ( ) 。
二、區(qū)別
1.encodeURI(URIstring):
對在 URI 中具有特殊含義的 ASCII 標點符號,‘不會’進行轉義的:;/?:@&=+$,#
2.encodeURIComponent(URIstring)
對在 URI 中具有特殊含義的 ASCII 標點符號,‘也會’進行轉義的:;/?:@&=+$,#
例如
let url = 'http://www.baidu.com?a=1&c=2#abc123 4 -.!~*';
console.log(url);
// http://www.baidu.com?a=1&c=2#abc123 4 -.!~*
console.log(encodeURI(url));
// http://www.baidu.com?a=1&c=2#abc123%204%20-_.!~*
console.log(encodeURIComponent(url));
//http%3A%2F%2Fwww.baidu.com%3Fa%3D1%26c%3D2%23abc123%204%20-_.!~*
大多數(shù)使用 encodeURIComponent
一:Js的Url中傳遞中文參數(shù)亂碼問題,重點:encodeURI編碼,decodeURI解碼:
1.傳參頁面
Javascript代碼:
- 接收參數(shù)頁面:test02.html
二:如何獲取Url“?”后,“=”的參數(shù)值:
A.首先用window.location.href獲取到全部url值。
B.用split截取“?”后的全部
C.split(“?”)后面的[1]內數(shù)字,默認從0開始計算
三:Js中escape,unescape,encodeURI,encodeURIComponent區(qū)別:
1.傳遞參數(shù)時候使用,encodeURIComponent否則url中很容易被”#”,”?”,”&”等敏感符號隔斷。
2.url跳轉時候使用,編碼用encodeURI,解碼用decodeURI。
3.escape() 只是為0-255以外 ASCII字符 做轉換工作,轉換成的 %u**** 這樣的碼,如果要用更多的字符如 UTF-8字符庫 就一定要用 encodeURIComponent() 或 encodeURI() 轉換才可以成 %nn%nn 這的碼才可以,其它情況下escape,encodeURI,encodeURIComponent編碼結果相同,所以為了全球的統(tǒng)一化進程,在用 encodeURIComponent() 或 encodeURI() 代替 escape() 使用吧!