javascript html url encoding fragment-identifier

javascript - Codificación de window.location.hash



html url (4)

De hecho, en mi versión de Firefox (3.5 en Linux), si escribo "#% C3% BC" como un hash en la URL, la URL misma se transforma en unicode con "# ü". Pero parece que respondió su propia pregunta: en Firefox, el navegador transforma los códigos de escape de la entidad en la URL, mientras que en IE no.

Mi consejo es en realidad esto: en lugar de poner "#% C3% BC" en la URL, simplemente usa unicode completo en tus hash y URL. ¿Es eso una opción? Debería funcionar bien en cualquier navegador moderno.

¿ window.location.hash contiene la representación codificada o decodificada de la parte url?

Cuando abro la misma URL ( http://localhost/something/#%C3%BC donde %C3%BC traduce a ü ) en Firefox 3.5 e Internet Explorer 8, obtengo valores diferentes para document.location.hash :

  • IE8: #%C3%BC
  • FF3.5:

¿Hay alguna manera de obtener una variante en ambos navegadores?


Desafortunadamente, este es un error en Firefox, ya que decodifica la location.hash Tiene un tiempo extra cuando se accede. Por ejemplo, prueba esto en Firefox:

location.hash = "#%30"; location.hash === "#0"; // This is wrong, it should be "#%30"

La única solución multiproveedor es simplemente usar (location.href.split("#")[1] || "") para obtener el hash. Sin embargo, configurar el hash usando location.hash parece funcionar correctamente para todos los navegadores compatibles con location.hash .


Puede usar decodeURIComponent , devolverá en todos los casos:

decodeURIComponent(''#%C3%BC''); // #ü decodeURIComponent(''#ü''); // #ü

Pruébelo here .


Respondiendo a mi propia pregunta, mi solución actual es analizar window.location.href lugar de usar window.location.hash , porque el primero es siempre (es decir, en cada navegador) codificado en url. Por lo tanto, la función decodeURIComponent CMS propuesta siempre se puede usar de forma segura. YUI hace lo mismo, por lo tanto, no puede ser tan malo ...