据我所知,URL编码存在的原因是因为URL只支持ASCII编码。但由于双引号已经在ASCII表中,为什么它在URL编码中要被编码为%22呢?
字符"
属于RFC 1738(统一资源定位符)的第2.2节(URL字符编码问题),位于"不安全"部分下。其包含的原因是:
引号标记(
"""
)用于在某些系统中界定URL。
我想到的一个例子是HTML属性。例如,如果你有一个带有<a>
标签和href
属性的标签,你可能会用双引号括起URL。如果未对字符"
加引号,则该标签将变为无效:
<a href="https://example.com/this"should-be-quoted">...</a>
其他不安全字符的一些示例:
字符
"<"
和">"
是不安全的,因为它们在自由文本中用作URL的分隔符。字符
"%"
是不安全的,因为它用于对其他字符进行编码。字符
"#"
是不安全的,并且应始终进行编码,因为它用于在万维网和其他系统中将URL与可能跟随其后的片段/锚标识符分隔开。
URL只支持ASCII编码
这并不是完全正确的。例如,即使空格、/
、&
或?
是有效的ASCII字符,但它们在URL中具有特殊含义,因此URL不支持它们。
URL中有效的字符包括:
不支持其他字符。有些字符,如空格和制表符,在通常使用URL(例如HTTP)的协议中具有特殊含义,因此不受支持。其他字符,例如?
和&
,由于在URL语法中具有特殊含义,因此也不受支持。
?
和&
是特殊字符,不能直接包含在其中。这不仅仅涉及ASCII字符。 - deceze