2009-12-31 5 views
0

Mettez dans votre barre d'adresse dans Internet ExplorerIE javascript html encodage bizarreries

javascript:location.href='http://www.google.com/search?q=something&lt=bar' 

avec horreur qu'il pense obligeamment &lt signifie réellement &lt; et fait un <.

WTF se passe-t-il ici?

D'autres navigateurs ne le font pas. Comment puis-je empêcher IE de le faire?

+0

IE devrait mourir. Au moins, IE6 devrait. – jrharshath

Répondre

1

Puisqu'il fait partie d'un document HTML, vous devez échapper le & en le remplaçant par & amp;

Une esperluette '&' en HTML marque le début d'une entité de référence de caractère telle que & lt; & gt; et & eacute;

Les esperluettes littérales dans votre document doivent être écrites comme suit: & amp;

Notez que si ce code est généré dynamiquement, vous devez également échapper l'URL afin qu'elle puisse également apparaître dans une chaîne JavaScript.

Modifié: Je peux confirmer que ce problème particulier se produit lorsque vous collez du code JavaScript directement dans la barre d'adresse. Il semble que les règles d'échappement de caractères HTML ne sont pas pertinentes après tout.

J'ai recherché un peu sur google et trouvé blog post qui identifie ce comportement particulier comme un bug ie.

+0

Cela se produit même lorsque vous exécutez javascript dans la barre d'adresse. Cela se produirait même en référençant la fonction à partir d'un fichier .js. Ce faisant, cela casserait tous les autres navigateurs qui ne s'attendaient pas à ce que les chaînes javascript soient encodées. (Il casse Chrome et Firefox à coup sûr - pas sûr de Opera) –

+1

@HS Vous avez raison. J'ai trouvé ce blog sur le problème, il ressemble à un bug ie http://nedbatchelder.com/blog/200812/accidental_html_entities_in_urls.html –

+0

Belle trouvaille. J'ai essayé de googler mais je ne savais pas quels mots-clés utiliser. Réorganiser la chaîne de requête résoudrait ce problème. Merci. Je vais marquer cette réponse comme 'correcte' - éditez votre message pour ajouter ce lien. –