我很想知道为什么 '%20' 被用作 URL 中的空格,特别是为什么使用 %20 以及为什么我们首先需要它。
3 回答
它被称为百分比编码。有些字符不能在 URI 中(例如#
,因为它表示 URL 片段),所以它们用可以是(#
变成%23
)的字符表示
这是同一篇文章的摘录:
当保留集中的字符(“保留字符”)在特定上下文中具有特殊含义(“保留目的”),并且 URI 方案表明有必要将该字符用于其他目的时,则该字符必须是百分比编码的。 对保留字符进行百分比编码涉及将字符转换为其对应的 ASCII 字节值,然后将该值表示为一对十六进制数字。然后在 URI 中使用用作转义字符的百分号 ("%") 前面的数字代替保留字符。(对于非 ASCII 字符,一般会转换成 UTF-8 中的字节序列,然后每个字节值如上所示。)
空格字符的字符代码是32
:
> ' '.charCodeAt(0)
32
在base 20
-16中:
> ' '.charCodeAt(0).toString(16)
"20"
在它前面加上一个百分号,你就得到了%20
。
因为 URL 具有严格的句法规则,例如/
作为特殊的路径分隔符,URL 中不允许有空格,并且所有字符都必须是 ASCII 的某个子集。无论这些限制如何,要在 URL 中嵌入任意字符,可以对字节进行百分比编码。该字节x20
表示 ASCII 编码(和大多数其他编码)中的一个空格,因此%20
是它的 URL 编码版本。
它使用百分比编码。您可以看到RFC for Uniform Resource Identifier (URI)的Percent Encoding部分:通用语法
当八位位组的相应字符超出允许的集合或用作组件的分隔符或组件内时,百分比编码机制用于表示组件中的数据八位位组
。百分比编码的八位位组被编码为一个字符
三元组,由百分比字符“%”后跟
表示该八位位组数值的两个十六进制数字组成。例如
,“%20”是二进制八位字节
“00100000”(ABNF:%x20)的百分比编码,在 US-ASCII 中对应于空格
字符 (SP)。