2012-06-22 19 views
8

Noté que Wikipedia utiliza la codificación porcentual para la sección de ruta de una URL, pero convierte el carácter % en . para el #fragmento.¿Por qué Wikipedia usa un porcentaje de codificación modificado en sus fragmentos de URL?

Por ejemplo, en el Russian 'Russia' page, la dirección URL de section 2 (История) es

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

en lugar de

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

Tampoco son válidos HTML < 5 fichas para un id/nombre que el token debe comenzar con [A-Za-z]. HTML5 currently states que puede utilizar al menos uno de los caracteres además del espacio (por lo que no necesita codificar para nada), pero Wikipedia no es HTML5.

Entonces, ¿por qué Wikipedia usó este esquema?

+0

Disculpe, leí mal. –

Respuesta

5

Una posible respuesta son los problemas de varios navegadores. Los navegadores son inconsistentes en la forma en que manejan unicode, especialmente con fragmentos de URL.

Por ejemplo, con el enlace

<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 

pero con un fragmento:

<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

path = javascript:location.pathname después del siguiente enlace

de hash = javascript:location.hash después del siguiente enlace

Así Firefox decodificar código porciento del fragmento a Unicode cuando se pide el hash, haciendo que no coincide con el nombre/ID valor del atributo. Tenga en cuenta que esto es solo un problema en JavaScript; los siguientes enlaces funciona bien.

Cuestiones relacionadas