一、"%编码"规范:( "%" 其后跟随两位的十六进制数,共256种)
1. ASCII字符(ASCII 是7比特字符集,包含了128个不同的字符值。此处有127个,少了设备控制字符中的DEL)
-
- 非转义字符:不编码;
ASCII 字符 |
URL-编码 |
! |
%21 |
' |
%27 |
( |
%28 |
) |
%29 |
* |
%2A |
- |
%2D |
. |
%2E |
0 |
%30 |
1 |
%31 |
2 |
%32 |
3 |
%33 |
4 |
%34 |
5 |
%35 |
6 |
%36 |
7 |
%37 |
8 |
%38 |
9 |
%39 |
A |
%41 |
B |
%42 |
C |
%43 |
D |
%44 |
E |
%45 |
F |
%46 |
G |
%47 |
H |
%48 |
I |
%49 |
J |
%4A |
K |
%4B |
L |
%4C |
M |
%4D |
N |
%4E |
O |
%4F |
P |
%50 |
Q |
%51 |
R |
%52 |
S |
%53 |
T |
%54 |
U |
%55 |
V |
%56 |
W |
%57 |
X |
%58 |
Y |
%59 |
Z |
%5A |
_ |
%5F |
a |
%61 |
b |
%62 |
c |
%63 |
d |
%64 |
e |
%65 |
f |
%66 |
g |
%67 |
h |
%68 |
i |
%69 |
j |
%6A |
k |
%6B |
l |
%6C |
m |
%6D |
n |
%6E |
o |
%6F |
p |
%70 |
q |
%71 |
r |
%72 |
s |
%73 |
t |
%74 |
u |
%75 |
v |
%76 |
w |
%77 |
x |
%78 |
y |
%79 |
z |
%7A |
~ |
%7E |
-
- 保留字符:encodeURIComponent()编码,encodeURI()不编码
ASCII 字符 |
URL-编码 |
$ |
%24 |
& |
%26 |
+ |
%2B |
, |
%2C |
/ |
%2F |
: |
%3A |
; |
%3B |
= |
%3D |
? |
%3F |
@ |
%40 |
编码原因:
-
-
-
- 保留字具有特殊的含义。如"&"表示参数分隔符,"="表示参数key和value的连接
- 如果 value 字符串本身包含了 = 或者 & ,如宝洁公司的简称为P&G,假设需要当做参数去传递,那么可能URL所带参数可能会是这样 ?name=P&G&t=1450591802326,因为参数中多了一个&势必会造成接收 URL 的服务器解析错误,因此必须将引起歧义的 & 和 = 符号进行转义, 也就是对其进行编码。
-
- 数字符号:encodeURIComponent()编码,encodeURI()不编码
-
ASCII 字符 |
URL-编码 |
# |
%23 |
-
- 其他字符:编码
ASCII 字符 |
URL-编码 |
||
space |
%20 |
||
" |
%22 |
||
% |
%25 |
||
< |
%3C |
||
> |
%3E |
||
[ |
%5B |
||
|
%5C |
||
] |
%5D |
||
^ |
%5E |
||
` |
%60 |
||
{ |
%7B |
||
| |
%7C |
||
} |
%7D |
||
ASCII 设备控制字符 |
描述 |
URL-编码 |
|
NUL |
null character |
%00 |
|
SOH |
start of header |
%01 |
|
STX |
start of text |
%02 |
|
ETX |
end of text |
%03 |
|
EOT |
end of transmission |
%04 |
|
ENQ |
enquiry |
%05 |
|
ACK |
acknowledge |
%06 |
|
BEL |
bell (ring) |
%07 |
|
BS |
backspace |
%08 |
|
HT |
horizontal tab |
%09 |
|
LF |
line feed |
%0A |
|
VT |
vertical tab |
%0B |
|
FF |
form feed |
%0C |
|
CR |
carriage return |
%0D |
|
SO |
shift out |
%0E |
|
SI |
shift in |
%0F |
|
DLE |
data link escape |
%10 |
|
DC1 |
device control 1 |
%11 |
|
DC2 |
device control 2 |
%12 |
|
DC3 |
device control 3 |
%13 |
|
DC4 |
device control 4 |
%14 |
|
NAK |
negative acknowledge |
%15 |
|
SYN |
synchronize |
%16 |
|
ETB |
end transmission block |
%17 |
|
CAN |
cancel |
%18 |
|
EM |
end of medium |
%19 |
|
SUB |
substitute |
%1A |
|
ESC |
escape |
%1B |
|
FS |
file separator |
%1C |
|
GS |
group separator |
%1D |
|
RS |
record separator |
%1E |
|
US |
unit separator |
%1F |
2. 非ASCII字符(129个):取其Unicode内码,然后加上"%"前缀将该字符进行编码
非ASCII 字符 |
URL-编码 |
|
%7F |
` |
%80 |
|
%81 |
‚ |
%82 |
ƒ |
%83 |
" |
%84 |
… |
%85 |
† |
%86 |
‡ |
%87 |
ˆ |
%88 |
‰ |
%89 |
Š |
%8A |
‹ |
%8B |
Œ |
%8C |
|
%8D |
Ž |
%8E |
|
%8F |
|
%90 |
' |
%91 |
' |
%92 |
" |
%93 |
" |
%94 |
• |
%95 |
– |
%96 |
— |
%97 |
˜ |
%98 |
™ |
%99 |
š |
%9A |
› |
%9B |
œ |
%9C |
|
%9D |
ž |
%9E |
Ÿ |
%9F |
|
%A0 |
¡ |
%A1 |
¢ |
%A2 |
£ |
%A3 |
¤ |
%A4 |
¥ |
%A5 |
¦ |
%A6 |
§ |
%A7 |
¨ |
%A8 |
© |
%A9 |
ª |
%AA |
« |
%AB |
¬ |
%AC |
|
%AD |
® |
%AE |
¯ |
%AF |
° |
%B0 |
± |
%B1 |
² |
%B2 |
³ |
%B3 |
´ |
%B4 |
µ |
%B5 |
¶ |
%B6 |
· |
%B7 |
¸ |
%B8 |
¹ |
%B9 |
º |
%BA |
» |
%BB |
¼ |
%BC |
½ |
%BD |
¾ |
%BE |
¿ |
%BF |
À |
%C0 |
Á |
%C1 |
 |
%C2 |
à |
%C3 |
Ä |
%C4 |
Å |
%C5 |
Æ |
%C6 |
Ç |
%C7 |
È |
%C8 |
É |
%C9 |
Ê |
%CA |
Ë |
%CB |
Ì |
%CC |
Í |
%CD |
Î |
%CE |
Ï |
%CF |
Ð |
%D0 |
Ñ |
%D1 |
Ò |
%D2 |
Ó |
%D3 |
Ô |
%D4 |
Õ |
%D5 |
Ö |
%D6 |
× |
%D7 |
Ø |
%D8 |
Ù |
%D9 |
Ú |
%DA |
Û |
%DB |
Ü |
%DC |
Ý |
%DD |
Þ |
%DE |
ß |
%DF |
à |
%E0 |
á |
%E1 |
â |
%E2 |
ã |
%E3 |
ä |
%E4 |
å |
%E5 |
æ |
%E6 |
ç |
%E7 |
è |
%E8 |
é |
%E9 |
ê |
%EA |
ë |
%EB |
ì |
%EC |
í |
%ED |
î |
%EE |
ï |
%EF |
ð |
%F0 |
ñ |
%F1 |
ò |
%F2 |
ó |
%F3 |
ô |
%F4 |
õ |
%F5 |
ö |
%F6 |
÷ |
%F7 |
ø |
%F8 |
ù |
%F9 |
ú |
%FA |
û |
%FB |
ü |
%FC |
ý |
%FD |
þ |
%FE |
ÿ |
%FF |
二、相关函数
1. encodeURI()
- 对一个完整的URI进行编码对除“非转义字符”、“保留字符”、“数字符号”以外的字符编码
- 原因:URI是完整的URI,无需对那些保留的并且在URI中有特殊意思的字符进行编码。
- encodeURI 自身无法产生能适用于HTTP GET 或 POST 请求的URI,例如对于 XMLHTTPRequests, 因为 "&", "+", 和 "=" 等保留字符不会被编码,然而在 GET 和 POST 请求中它们是特殊字符。此时,encodeURIComponent方法可以对这些字符编码。
- 语法:
- encodeURI(URI)
- 参数URI:一个完整的URI
- encodeURI(URI)
- 例:
encodeURI("http://www.cnblogs.com/season-huang/some other thing");
//"http://www.cnblogs.com/season-huang/some%20other%20thing";
2. decodeURI()
- 将已编码 URI 中所有能识别的转义序列转换成原字符,但不能解码那些不会被 encodeURI 编码的内容(例如 "#")
- 语法:
- decodeURI(encodedURI)
- 参数encodedURI:一个完整的编码过的URI
- decodeURI(encodedURI)
3. encodeURIComponent()
- 对URI的组成部分进行编码
- 作用:对 URL 中的参数进行编码,而不是对整个 URL 进行编码
- 对除“非转义字符”以外的字符编码(包括“保留字符”、“数字符号”)
- 语法:
- encodeURIComponent(str)
- 参数str:字符串,URI 的组成部分
- encodeURIComponent(str)
- 例:
- 错误的用法:
var URL = "http://www.a.com?foo=http://www.b.com?t=123&s=456";
encodeURIComponent(URL);
// "http%3A%2F%2Fwww.a.com%3Ffoo%3Dhttp%3A%2F%2Fwww.b.com%3Ft%3D123%26s%3D456"
-
- 正确的用法:
var param = "http://www.b.com?t=123&s=456"; // 要被编码的参数
URL = "http://www.a.com?foo="+encodeURIComponent(param);
//"http://www.a.com?foo=http%3A%2F%2Fwww.b.com%3Ft%3D123%26s%3D456"
4. decodeURIComponent()
- 用于解码由 encodeURIComponent 方法或者其它类似方法编码的部分
- 语法:
- decodeURIComponent(encodedURI)
- 参数encodedURI:编码后的部分URI
- decodeURIComponent(encodedURI)