URL 编码
URL 编码就是将 URLs 中不宜打印的字符或者具有特殊意义的字符转换为 Web 浏览器和服务器明白且普遍接受的表示法。 这些字符包括:
ASCII 控制字符 - 不宜打印的字符通常用于输出控制。字符范围是十六进制的 00-1F(十进制的 0-31)和 7F(十进制的 127)。下面提供了完整的编码表。
非 ASCII 控制字符 - 这些字符超出了 128 个 ASCII 字符集的范围。这个范围是 ISO-拉丁字符集的一部分以及包含整个十六进制的 ISO-拉丁字符集 00-FF (十进制的 128-255)的“前半部分”。下面提供了完整的编码表。
保留字符 - 诸如美元符号,和号,加号,通用符号,正斜杠,冒号,分好,等号,问号以及 “at”这类符号。所有这些符号在 URL 内都有不同的意义,因此需要编码。下面提供了完整的编码表。
不安全字符 - 包括空格,问号,小于符号,大于符号,磅字符,百分比符号,大括号左边部分,大括号右边部分,管道符,反斜杠,插入符号,波浪线。左方括号,右方括号,沉音符。出于某些原因,这些字符出现在 URLs 中存在被误解的可能性。这些字符也应该始终被编码。下面提供了完整的编码表。
编码表示法需要三个字符替换期望的字符:一个百分号,两个在 ASCII 字符集中表示字符位置的十六进制数字、
示例
最常见的特殊字符之一便是空格。我们不能在 URL 中直接输入一个空格。空格在字符集中就是十六进制的 20。因此请求服务器时可以使用 %20 表示空格。
复制代码代码如下:http://www.example.com/new%20pricing.html
这个 URL 实际上是从 www.example.com 检索一个名为 new pricing.html 的文档。
ASCII 控制字符编码
包括十六进制的 00-1F(十进制的 0-31)和 7F(十进制的 127)字符码。
| 十进制格式 |
十六进制值 |
字符 |
URL 编码 |
| 0 |
00 |
|
%00 |
| 1 |
01 |
|
%01 |
| 2 |
02 |
|
%02 |
| 3 |
03 |
|
%03 |
| 4 |
04 |
|
%04 |
| 5 |
05 |
|
%05 |
| 6 |
06 |
|
%06 |
| 7 |
07 |
|
%07 |
| 8 |
08 |
退格符 |
%08 |
| 9 |
09 |
tab |
%09 |
| 10 |
0a |
换行符 |
%0a |
| 11 |
0b |
|
%0b |
| 12 |
0c |
|
%0c |
| 13 |
0d |
回车符 |
%0d |
| 14 |
0e |
|
%0e |
| 15 |
0f |
|
%0f |
| 16 |
10 |
|
%10 |
| 17 |
11 |
|
%11 |
| 18 |
12 |
|
%12 |
| 19 |
13 |
|
%13 |
| 20 |
14 |
|
%14 |
| 21 |
15 |
|
%15 |
| 22 |
16 |
|
%16 |
| 23 |
17 |
|
%17 |
| 24 |
18 |
|
%18 |
| 25 |
19 |
|
%19 |
| 26 |
1a |
|
%1a |
| 27 |
1b |
|
%1b |
| 28 |
1c |
|
%1c |
| 29 |
1d |
|
%1d |
| 30 |
1e |
|
%1e |
| 31 |
1f |
|
%1f |
| 127 |
7f |
|
%7f |
非 ASCII 控制字符编码
包括整个十六进制的 ISO-拉丁字符集 80-FF(十进制的 128-255)编码的“前半部分”。
| 十进制格式 |
十六进制值 |
字符 |
URL 编码 |
| 128 |
80 |
€ |
%80 |
| 129 |
81 |
? |
%81 |
| 130 |
82 |
? |
%82 |
| 131 |
83 |
? |
%83 |
| 132 |
84 |
? |
%84 |
| 133 |
85 |
… |
%85 |
| 134 |
86 |
? |
%86 |
| 135 |
87 |
? |
%87 |
| 136 |
88 |
? |
%88 |
| 137 |
89 |
‰ |
%89 |
| 138 |
8a |
? |
%8a |
| 139 |
8b |
? |
%8b |
| 140 |
8c |
? |
%8c |
| 141 |
8d |
? |
%8d |
| 142 |
8e |
? |
%8e |
| 143 |
8f |
? |
%8f |
| 144 |
90 |
? |
%90 |
| 145 |
91 |
‘ |
%91 |
| 146 |
92 |
’ |
%92 |
| 147 |
93 |
“ |
%93 |
| 148 |
94 |
” |
%94 |
| 149 |
95 |
? |
%95 |
| 150 |
96 |
– |
%96 |
| 151 |
97 |
— |
%97 |
| 152 |
98 |
? |
%98 |
| 153 |
99 |
? |
%99 |
| 154 |
9a |
? |
%9a |
| 155 |
9b |
? |
%9b |
| 156 |
9c |
? |
%9c |
| 157 |
9d |
? |
%9d |
| 158 |
9e |
? |
%9e |
| 159 |
9f |
? |
%9f |
| 160 |
a0 |
|
%a0 |
| 161 |
a1 |
? |
%a1 |
| 162 |
a2 |
¢ |
%a2 |
| 163 |
a3 |
£ |
%a3 |
| 164 |
a4 |
¤ |
%a4 |
| 165 |
a5 |
¥ |
%a5 |
| 166 |
a6 |
| |
%a6 |
| 167 |
a7 |
§ |
%a7 |
| 168 |
a8 |
¨ |
%a8 |
| 169 |
a9 |
? |
%a9 |
| 170 |
aa |
a |
%aa |
| 171 |
ab |
? |
%ab |
| 172 |
ac |
? |
%ac |
| 173 |
ad |
- |
%ad |
| 174 |
ae |
? |
%ae |
| 175 |
af |
ˉ |
%af |
| 176 |
b0 |
° |
%b0 |
| 177 |
b1 |
± |
%b1 |
| 178 |
b2 |
2 |
%b2 |
| 179 |
b3 |
3 |
%b3 |
| 180 |
b4 |
′ |
%b4 |
| 181 |
b5 |
μ |
%b5 |
| 182 |
b6 |
? |
%b6 |
| 183 |
b7 |
· |
%b7 |
| 184 |
b8 |
? |
%b8 |
| 185 |
b9 |
1 |
%b9 |
| 186 |
ba |
o |
%ba |
| 187 |
bb |
? |
%bb |
| 188 |
bc |
? |
%bc |
| 189 |
bd |
? |
%bd |
| 190 |
be |
? |
%be |
| 191 |
bf |
? |
%bf |
| 192 |
c0 |
à |
%c0 |
| 193 |
c1 |
á |
%c1 |
| 194 |
c2 |
? |
%c2 |
| 195 |
c3 |
? |
%c3 |
| 196 |
c4 |
? |
%c4 |
| 197 |
c5 |
? |
%c5 |
| 198 |
c6 |
? |
%v6 |
| 199 |
c7 |
? |
%c7 |
| 200 |
c8 |
è |
%c8 |
| 201 |
c9 |
é |
%c9 |
| 202 |
ca |
ê |
%ca |
| 203 |
cb |
? |
%cb |
| 204 |
cc |
ì |
%cc |
| 205 |
cd |
í |
%cd |
| 206 |
ce |
? |
%ce |
| 207 |
cf |
? |
%cf |
| 208 |
d0 |
D |
%d0 |
| 209 |
d1 |
? |
%d1 |
| 210 |
d2 |
ò |
%d2 |
| 211 |
d3 |
ó |
%d3 |
| 212 |
d4 |
? |
%d4 |
| 213 |
d5 |
? |
%d5 |
| 214 |
d6 |
? |
%d6 |
| 215 |
d7 |
× |
%d7 |
| 216 |
d8 |
? |
%d8 |
| 217 |
d9 |
ù |
%d9 |
| 218 |
da |
ú |
%da |
| 219 |
db |
? |
%db |
| 220 |
dc |
ü |
%dc |
| 221 |
dd |
Y |
%dd |
| 222 |
de |
T |
%de |
| 223 |
df |
? |
%df |
| 224 |
e0 |
à |
%e0 |
| 225 |
e1 |
á |
%e1 |
| 226 |
e2 |
a |
%e2 |
| 227 |
e3 |
? |
%e3 |
| 228 |
e4 |
? |
%e4 |
| 229 |
e5 |
? |
%e5 |
| 230 |
e6 |
? |
%e6 |
| 231 |
e7 |
? |
%e7 |
| 232 |
e8 |
è |
%e8 |
| 233 |
e9 |
é |
%e9 |
| 234 |
ea |
ê |
%ea |
| 235 |
eb |
? |
%eb |
| 236 |
ec |
ì |
%ec |
| 237 |
ed |
í |
%ed |
| 238 |
ee |
? |
%ee |
| 239 |
ef |
? |
%ef |
| 240 |
f0 |
e |
%f0 |
| 241 |
f1 |
? |
%f1 |
| 242 |
f2 |
ò |
%f2 |
| 243 |
f3 |
ó |
%f3 |
| 244 |
f4 |
? |
%f4 |
| 245 |
f5 |
? |
%f5 |
| 246 |
f6 |
? |
%f6 |
| 247 |
f7 |
÷ |
%f7 |
| 248 |
f8 |
? |
%f8 |
| 249 |
f9 |
ù |
%f9 |
| 250 |
fa |
ú |
%fa |
| 251 |
fb |
? |
%fb |
| 252 |
fc |
ü |
%fc |
| 253 |
fd |
y |
%fd |
| 254 |
fe |
t |
%fe |
| 255 |
ff |
? |
%ff |
保留字符编码
下表用于编码保留字符。
| 十进制格式 |
十六进制值 |
字符 |
URL 编码 |
| 36 |
24 |
$ |
%24 |
| 38 |
26 |
& |
%26 |
| 43 |
2b |
+ |
%2b |
| 44 |
2c |
, |
%2c |
| 47 |
2f |
/ |
%2f |
| 58 |
3a |
: |
%3a |
| 59 |
3b |
; |
%3b |
| 61 |
3d |
= |
%3d |
| 63 |
3f |
? |
%3f |
| 64 |
40 |
@ |
%40 |
不安全字符编码
下表用于编码不安全字符。
| 十进制格式 |
十六进制值 |
字符 |
URL 编码 |
| 32 |
20 |
space |
%20 |
| 34 |
22 |
" |
%22 |
| 60 |
3c |
< |
%3c |
| 62 |
3e |
> |
%3e |
| 35 |
23 |
# |
%23 |
| 37 |
25 |
% |
%25 |
| 123 |
7b |
{ |
%7b |
| 125 |
7d |
} |
%7d |
| 124 |
7c |
| |
%7c |
| 92 |
5c |
\ |
%5c |
| 94 |
5e |
^ |
%5e |
| 126 |
7e |
~ |
%7e |
| 91 |
5b |
[ |
%5b |
| 93 |
5d |
] |
%5d |
| 96 |
60 |
` |
%60 |
字符编码
字符编码就是将字节转换为字符的一种方法。要验证或者显示一个 HTML 文档,程序必须选择一个字符编码。HTML5 作者有三种方式设置字符编码:
HTTP Content-Type 头:
如果你在编写 cgi 程序或者类似的程序,那么可以使用 HTTP Content-Type 头设置任意字符编码:
下面是一个简单的例子:
XML/HTML Code复制内容到剪贴板
- print "Content-Type: text/html; charset=utf-8\r\n";
<meta> 元素:
可以使用带有 charset 属性的 <meta> 元素指定 HTML5 文档前 512 个字节的编码:
下面是简化的例子:
XML/HTML Code复制内容到剪贴板
- <meta charset="UTF-8">
尽管这种语法是被允许的,但上述语法需要使用 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 替换。
Unicode 字节顺序标记(BOM)
一个字节顺序标记(BOM)由数据流开头的 U+FEFF 字符码组成,它可以用作定义字节顺序和编码形式的签名,主要是未标记的明文文件。
许多 Windows 程序(包括 Windows 记事本)都会在保存为 UTF-8 的任意文档开头添加 0xEF, 0xBB, 0xBF。这就是 Unicode 字节顺序标记(BOM)的 UTF-8 编码,通常被称为 UTF-8 BOM,尽管它和字节顺序没有关系。
对于 HTML5 文档,我们可以在文件的开头使用 Unicode 字节顺序标记(BOM)字符。这个字符为使用的编码提供了签名。