为什么双引号被编码为%22?

3
据我所知,URL编码存在的原因是因为URL只支持ASCII编码。但由于双引号已经在ASCII表中,为什么它在URL编码中要被编码为%22呢?

1
URL编码存在的目的是对无法在URL中表示的字符进行编码,以符合各个URL组件所施加的限制。例如,在查询组件中,?&是特殊字符,不能直接包含在其中。这不仅仅涉及ASCII字符。 - deceze
此外,https://tools.ietf.org/html/rfc3986#appendix-C - m02ph3u5
2个回答

5

字符"属于RFC 1738(统一资源定位符)的第2.2节(URL字符编码问题),位于"不安全"部分下。其包含的原因是:

引号标记(""")用于在某些系统中界定URL。

我想到的一个例子是HTML属性。例如,如果你有一个带有<a>标签和href属性的标签,你可能会用双引号括起URL。如果未对字符"加引号,则该标签将变为无效:

<a href="https://example.com/this"should-be-quoted">...</a>

RFC还进一步指出: 所有不安全的字符必须始终在URL中进行编码。

其他不安全字符的一些示例:

字符 "<"">" 是不安全的,因为它们在自由文本中用作URL的分隔符。

字符 "%" 是不安全的,因为它用于对其他字符进行编码。

字符 "#" 是不安全的,并且应始终进行编码,因为它用于在万维网和其他系统中将URL与可能跟随其后的片段/锚标识符分隔开。


2

URL只支持ASCII编码

这并不是完全正确的。例如,即使空格、/&?是有效的ASCII字符,但它们在URL中具有特殊含义,因此URL不支持它们。

URL中有效的字符包括:

  • A-Z
  • a-z
  • 0-9
  • -
  • _
  • .
  • ~

不支持其他字符。有些字符,如空格和制表符,在通常使用URL(例如HTTP)的协议中具有特殊含义,因此不受支持。其他字符,例如?&,由于在URL语法中具有特殊含义,因此也不受支持。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接