Dee*_*ter 8 url fragment-identifier url-design percent-encoding
我注意到Wikipedia使用百分比编码作为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 目前声明您可以使用除空格之外的任何字符中的至少一个(因此您根本不需要编码),但维基百科不是HTML5.
那么,为什么维基百科使用这个方案呢?
一个可能的答案是跨浏览器问题.浏览器处理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
Run Code Online (Sandbox Code Playgroud)
但是有一个片段:
<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
Run Code Online (Sandbox Code Playgroud)
href = javascript:document.getElementById('foo').href
path = javascript:location.pathname以下链接后
hash = javascript:location.hash在以下链接之后
因此,当您要求散列时,Firefox会将片段的百分比编码解码为unicode,从而导致它与id/name属性的值不匹配.注意,这只是JavaScript中的一个问题; 以下链接工作正常.