URL 片段中的百分比字符必须进行百分比编码吗?

问题描述 投票:0回答:1

URL 的片段部分从第一个

#
字符到达 URL 的末尾。由于像
%
?
&
这样的保留字符在片段中没有特殊含义,因此不需要在 URL 片段中对它们进行百分比编码,对吗?

换句话说:我相信 URL 片段

#%

#%25
 都应该被允许并且不相等。以下代码片段支持这一观点,因为使用 
http://server/#%
 加载它(在 Google Chrome 中)会突出显示第一段,而 
http://server/#%25
 会突出显示第二段。 (有点出乎意料的是,
http://server/#%2525
也突出了第二个。)

p:target { background-color: yellow; }
<p id="%">Buy today</p>
<p id="%25">and get 25% off!</p>
<a href="#%">http://server/#%</a>
<a href="#%25">http://server/#%25</a>
<a href="#%2525">http://server/#%2525</a>

这种行为正确吗?我喜欢它,但它似乎与

RFC 3986中的声明相矛盾:

由于百分号 (“%”) 字符用作百分比编码八位字节的指示符,因此必须将其百分比编码为“%25”,该八位字节才能用作 URI 中的数据。

url urlencode rfc3986 url-fragment
1个回答
0
投票
您是正确的,在 URL 的片段部分中,像

%

?
&
 这样的保留字符没有特殊含义,并且通常不需要在 URL 片段中对它们进行百分比编码。这意味着 
#%
#%25
 在 URL 片段中都是允许的,并且被视为不相等。

RFC 3986 中的声明指出,当用作 URI 中的数据(例如在路径或查询组件中)时,百分比字符

%

 本身必须进行百分比编码为 
%25
,以避免与百分比编码机制混淆。但是,在片段组件中,
%
字符可以在不进行百分比编码的情况下使用,因为它没有特殊含义。

因此,您观察到的行为与 URL 片段的处理一致,并且与 RFC 3986 并不矛盾。片段标识符可以包含保留字符,例如

%

,而不需要百分比编码。

© www.soinside.com 2019 - 2024. All rights reserved.