URL编码
一、"%编码"规范:( "%" 其后跟随两位的十六进制数,共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)

浙公网安备 33010602011771号