8

我注意到维基百科对 URL 的路径部分使用百分比编码,但将%字符转换.为#fragment。

例如,在俄语“俄罗斯”页面上,第 2 部分 (История)的 URL是

http://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F#.D0.98.D1.81.D1.82.D0.BE.D1.80.D0.B8.D1.8F

代替

http://ru.wikipedia.org/wiki/%D0%A0%D0%BE%D1%81%D1%81%D0%B8%D1%8F#%D0%98%D1%81%D1%82%D0%BE%D1%80%D0%B8%D1%8F

id/name 的 HTML<5 标记都不是有效的标记,因为标记必须以 [A-Za-z] 开头。HTML5目前声明您可以使用除空格之外的任何字符中的至少一个(因此您根本不需要编码),但 Wikipedia 不是 HTML5。

那么,为什么维基百科要使用这个方案呢?

4

1 回答 1

5

一种可能的答案是跨浏览器问题。浏览器处理 unicode 的方式不一致,尤其是 URL 片段。

例如,通过链接

<a id="foo" href="%D1%83%D0%BE%D0%BC%D0%B1%D0%BB%D1%8B">Уомблы</a>

Browser      | Hover   | Location bar | href*   | path*
----------------------------------------------------------
Chrome 19    | Unicode | Unicode      | Percent | Percent
Firefox 13   | Unicode | Unicode      | Percent | Percent
IE 9         | Percent | Percent      | Percent | Percent

但有一个片段:

<a id="foo" href="#%D1%83%D0%BE%D0%BC%D0%B1%D0%BB%D1%8B">Уомблы</a>

Browser      | Hover   | Location bar | href*   | hash*
----------------------------------------------------------
Chrome 19    | Percent | Percent      | Percent | Percent
Firefox 13   | Unicode | Unicode      | Percent | Unicode
IE 9         | Percent | Percent      | Percent | Percent

链接=javascript:document.getElementById('foo').href

路径=javascript:location.pathname在以下链接之后

哈希=javascript:location.hash在以下链接之后

因此,当您请求哈希时,Firefox 会将片段的百分比编码解码为 un​​icode,导致它与 id/name 属性的值不匹配。注意,这只是 JavaScript 中的一个问题;以下链接工作正常。

于 2012-06-22T15:24:59.990 回答