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)字符。这个字符为使用的编码提供了签名。