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