Comment coder en toute sécurité une URL à l'aide de JavaScript afin qu'elle puisse être placée dans une chaîne GET ?
var myUrl = "http://example.com/index.html?param=1&anotherParam=2";
var myOtherUrl = "http://example.com/index.html?url=" + myUrl;
Je suppose que vous devez coder la variable myUrl
sur cette deuxième ligne ?
Consultez les fonctions intégrées encodeURIComponent(str) et encodeURI(str).
Dans votre cas, cela devrait fonctionner :
var myOtherUrl =
"http://example.com/index.html?url=" + encodeURIComponent(myUrl);
Vous avez trois options :
escape()
ne codera pas : @*/+
encodeURI()
ne codera pas : ~!@#$&*()=:/,;?+'
encodeURIComponent()
ne codera pas : ~!*()'
Mais dans votre cas, si vous voulez passer une [URL][1] dans un paramètre GET
d'une autre page, vous devriez utiliser escape
ou encodeURIComponent
, mais pas encodeURI
.
Voir la question de Stack Overflow [Best practice : escape, or encodeURI / encodeURIComponent][2] pour une discussion plus approfondie.
[1] : http://en.wikipedia.org/wiki/Uniform_Resource_Locator [2] : https://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent
Utilisez plutôt encodeURIComponent()
. La fonction encodeURI()
ne prend pas la peine de coder de nombreux caractères qui ont une importance sémantique dans les URLs (par exemple "#", " ?", et "&"). escape()
est déprécié et ne prend pas la peine de coder les caractères "+", qui seront interprétés comme des espaces codés sur le serveur (et, comme d'autres l'ont fait remarquer ici, ne code pas correctement les caractères non-ASCII dans les URL).
Il y a une bonne [explication de la différence entre encodeURI()
et encodeURIComponent()
][1] ailleurs. Si vous voulez encoder quelque chose de façon à ce qu'il puisse être inclus en toute sécurité comme composant d'un URI (par exemple comme paramètre de chaîne de requête), vous devez utiliser encodeURIComponent()
.
[1] : https://stackoverflow.com/questions/75980/best-practice-escape-or-encodeuri-encodeuricomponent