2759 votes

Comment coder une URL en JavaScript?

Comment faites-vous en toute sécurité coder une URL à l'aide de JavaScript tel qu'il peut être mis dans une chaîne de caractères?

var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;

Je suppose que vous avez besoin pour coder l' myUrl variable sur la deuxième ligne?

3084voto

Buu Nguyen Points 19391

Découvrez la fonction intégrée encodeURIComponent(str) et encodeURI(str).
Dans votre cas, cela devrait fonctionner:

var myOtherUrl = 
       "http://example.com/index.html?url=" + encodeURIComponent(myUrl);

1653voto

CMS Points 315406

Vous avez trois options:

  • escape() ne sera pas coder: @*/+

  • encodeURI() ne sera pas coder: ~!@#$&*()=:/,;?+'

  • encodeURIComponent() ne sera pas coder: ~!*()'

Mais dans votre cas, si vous souhaitez passer une URL dans un GET paramètre de page, vous devez utiliser escape ou encodeURIComponent, mais pas encodeURI.

Voir Débordement de Pile question des Meilleures pratiques: la fuite, ou encodeURI / encodeURIComponent pour de plus amples discussions.

202voto

Mike Brennan Points 1384

Bâton avec encodeURIComponent(). La fonction encodeURI() ne prend pas la peine de coder de nombreux personnages qui ont sémantique importance dans l'Url (par exemple,"#", "?", et "&"). escape() est obsolète, et ne prend pas la peine de coder "+" caractères, ce qui sera interprété comme encodé espaces sur le serveur (et, comme souligné par d'autres ici, n'est pas encoder les caractères non-ASCII).

Il y a une belle explication de la différence entre encodeURI() et encodeURIComponent() ailleurs. Si vous voulez coder quelque chose de sorte qu'il peut en toute sécurité être inclus en tant qu'élément d'un URI (par exemple, un paramètre de chaîne de requête), vous souhaitez utiliser encodeURIComponent().

92voto

Ryan Taylor Points 450

Personnellement, je trouve que beaucoup Api souhaitez remplacer "" par "+" j'ai donc utiliser la syntaxe suivante:

encodeURIComponent(value).replace(/%20/g,'+')

escape est mis en œuvre différemment selon les navigateurs et encodeURI n'a pas d'encoder la plupart des personnages qui sont fonctionnels dans un URI (comme # et même /) -- c'est fait pour être utilisé sur un plein URI/URL sans les casser.

43voto

Maksym Kozlenko Points 4557

Si vous utilisez jQuery, je voudrais aller pour $.param méthode. C'URL encode un objet de mappage de champs de valeurs, ce qui est plus facile à lire que l'appel d'une méthode d'échappement sur chaque valeur.

$.param({a:"1=2", b:"Test 1"}) // gets a=1%3D2&b=Test+1

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