1

J'ai remarqué que IE7 n'UrlEncode pas les paramètres querystring extraites de javascript, par exemple:Comment UrlEncode location.search params dans IE7, en utilisant JavaScript

var qs = location.search; 

Dans Firefox, les paramètres sont codés. Comment puis-je écrire du code spécifique à IE pour encoder les paramètres de la même manière que FireFox?

Par exemple, dans Firefox, ce querystring:

?val=<script> 

//gets rewritten as: 

?val=%3Cscript%3E 

Répondre

3

Normalement, la fonction correcte encode une chaîne pour une utilisation dans le cadre de une URL est encodeURIComponent. Ne pas utiliser escape, qui est un schéma de codage personnalisé non standard obsolète unique à JavaScript. Il ressemble à l'encodage des paramètres d'URL, mais traite différemment les éléments positifs et tous les caractères non ASCII. Mettez-le avec un décodeur d'URL standard et vous obtenez des erreurs.

Cependant, vous ne devez pas appeler encodeURIComponent sur location.search si elle te donne des personnages comme mauvais ou <> (qui ne devrait pas apparaître dans une URL, mais IE vous permet d'entrer), car elle doublera-encoder les caractères qui sont déjà correctement codés; par exemple un vrai %3C dans l'adresse (à partir de si l'utilisateur a suivi un correctement -formé lien vers votre site) sera converti en %253C.

La correction des caractères d'URL 'non sécurisés' tout en laissant les caractères déjà codés est la raison d'être de la fonction encodeURI; essayez cela (sur tous les navigateurs, pas besoin de renifler). Il est rarement utilisé, mais pourrait être ce dont vous avez besoin. Sinon, vous êtes confronté à un remplacement ennuyeux de la fonction regexp-and-hex-encoding-function.

+0

C'est 'encodeURI' plutôt que' encoderURL'. –

+0

Vous avez raison! Je suis un imbécile aux gros doigts. – bobince

0

Vous pouvez utiliser la fonction escape:

var qs = escape(location.search); 
+1

Ne pas utiliser 'escape', il ne supporte pas le codage UTF-8. Utilisez 'encoderURIComponent' à la place. –

+0

@Andy: Merci pour le partage, je ne savais pas à ce sujet :) – Sarfraz