41 votes

Encodage de window.location.hash

Fait window.location.hash contient la représentation codée ou décodée de la partie url ?

Lorsque j'ouvre la même url ( http://localhost/something/#%C3%BC%C3%BC se traduit par ü ) dans Firefox 3.5 et Internet Explorer 8, j'obtiens des valeurs différentes pour les éléments suivants document.location.hash :

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

Existe-t-il un moyen d'obtenir une seule variante dans les deux navigateurs ?

38voto

Eli Grey Points 17553

Malheureusement, il s'agit d'un bug dans Firefox car il décode location.hash un temps supplémentaire lors de son accès. Par exemple, essayez ceci dans Firefox :

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

La seule solution inter-navigateur est d'utiliser simplement (location.href.split("#")[1] || "") à la place pour obtenir le hachage. Définir le hachage en utilisant location.hash semble fonctionner correctement pour tous les navigateurs qui supportent location.hash cependant.

6voto

Michael Points 4361

Pour répondre à ma propre question, ma solution actuelle consiste à analyser window.location.href au lieu d'utiliser window.location.hash car le premier est toujours (c'est-à-dire dans tous les navigateurs) codé en url. Par conséquent, le decodeURIComponent fonction CMS proposé peut toujours être utilisé en toute sécurité. YUI fait la même chose, donc ça ne peut pas être si mauvais...

4voto

CMS Points 315406

Vous pouvez utiliser decodeURIComponent il retournera dans tous les cas :

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

Essayez-le ici .

0voto

Ken Points 3228

En fait, dans ma version de Firefox (3.5 sous Linux), si je tape "#%C3%BC" comme un hash dans l'URL, l'URL elle-même est en réalité transforme à l'unicode avec "#ü". Mais vous semblez avoir répondu à votre propre question : dans Firefox, le navigateur transforme les codes d'échappement des entités dans l'URL, alors que dans IE, il ne le fait pas.

Mon conseil est en fait le suivant : Au lieu de mettre "#%C3%BC" dans l'URL, utilisez simplement l'unicode complet dans vos hashs et URLs. Est-ce une option ? Cela devrait fonctionner correctement dans tous les navigateurs modernes.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X