主要知識點:encodeURI和encodeURIComponenthtml
涉及代碼片斷瀏覽器
function encode(val) {
return encodeURIComponent(val).
replace(/%40/gi, '@').
replace(/%3A/gi, ':').
replace(/%24/g, '$').
replace(/%2C/gi, ',').
replace(/%20/g, '+').
//Using square bracket notation for URL params
replace(/%5B/gi, '[').
replace(/%5D/gi, ']');
}
複製代碼
encodeURI : encodeURI函數經過將特定字符的每一個實例替換爲一個、兩個、三或四轉義序列來對統一資源標識符 (URI) 進行編碼 (該字符的 UTF-8 編碼僅爲四轉義序列,由兩個 "代理" 字符組成)。app
在URI中,有一些字符會被%進行編碼,維基百科中的介紹爲:百分號編碼(英語:Percent-encoding,又稱:URL編碼(英語:URL encoding)),是特定上下文的統一資源定位符 (URL)的編碼機制. 實際上也適用於統一資源標誌符(URI)的編碼。也用於爲application/x-www-form-urlencodedMIME準備數據,由於它用於經過HTTP的請求操做(request)提交HTML表單數據。函數
encodeURI忽略協議前綴('http://')和域名部分。ui
不會被編碼的字符包括如下:編碼
類型 | 包含 |
---|---|
保留字符 | ; , / ? : @ & = + $ |
非轉義的字符 | 字母 數字 - _ . ! ~ * ' ( ) |
數字符號 | # |
其餘字符都會被%進行編碼,例如:中國
、ママ
等非以上列舉的字符。url
值得一提的是,URI的規範現遵循較新的標準RFC3986,包含的保留字符又增長了:spa
! * ' ( ) ; : @ & = + $ , / ? # [ ]
代理
新增的 [
和 ]
是爲IPv6而被保留的。所以,除了上述字符之外,URI中的其它字符必須用百分號編碼。code
! |
# |
$ |
% |
& |
' |
( |
) |
* |
+ |
, |
/ |
: |
; |
= |
? |
@ |
[ |
] |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
%21 |
%23 |
%24 |
%25 |
%26 |
%27 |
%28 |
%29 |
%2A |
%2B |
%2C |
%2F |
%3A |
%3B |
%3D |
%3F |
%40 |
%5B |
%5D |
乍一看是否是和encodeURI沒啥區別呢~,可是這個API強調的是:「對URI組成部分進行編碼的方法」,這個方法會轉義除了字母、數字(
)
.
!
~
*
'
-
和_以外的全部字符。包含上述介紹中的一些encodeURI不會進行轉義的字符。 具體說這個兩個方法以前有個結論: