Почему Википедию использовать модифицированный процентов кодировки в их фрагментов URL-адрес?
Я заметил, что Википедия использует процентное кодирование для раздела пути URL, но преобразует символ %
в .
для фрагмента#.
Например, на страницеRussian "Россия" URL-адрес раздела 2 (История)
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
Также не являются допустимыми HTML в настоящее время утверждает , что вы можете использовать по крайней мере один из любых символов помимо пространства (так что вам не нужно кодировать вообще), но Википедия-это не HTML5.
Итак, почему Википедия использовала эту схему?
1 ответ:
Один из возможных ответов - кроссбраузерные проблемы. Браузеры непоследовательны в том, как они обрабатывают 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
Href =
javascript:document.getElementById('foo').href
Путь =
javascript:location.pathname
после следующей ссылкиХэш =
javascript:location.hash
после перехода по ссылкеПоэтому Firefox будет декодировать процентное кодирование фрагмента в unicode, когда вы попросите хэш, в результате чего он не будет соответствует значению атрибута id/name. Обратите внимание, что это только проблема в JavaScript; следующие ссылки работают нормально.