主要知识点: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不会进行转义的字符。 具体说这个两个方法以前有个结论: