web-dev-qa-db-fra.com

Comment encoder les paramètres d'URL?

J'essaie de passer des paramètres à une URL qui ressemble à ceci:

http://www.foobar.com/foo?imageurl=

et je veux passer les paramètres tels que et l'URL de l'image qui est générée par une autre API, et le lien pour l'image devient:

http://www.image.com/?username=unknown&password=unknown

Cependant, lorsque j'essaie d'utiliser l'URL:

http://www.foobar.com/foo?imageurl=http://www.image.com/?username=unknown&password=unknown

ça ne marche pas ..

J'ai également essayé d'utiliser encodeURI et encodeURIComponents sur l'imageURL, mais cela ne fonctionne pas non plus.

96
Apoorv Saxena

Avec PHP

echo urlencode("http://www.image.com/?username=unknown&password=unknown");

Résultat

http%3A%2F%2Fwww.image.com%2F%3Fusername%3Dunknown%26password%3Dunknown

Avec Javascript:

var myUrl = "http://www.image.com/?username=unknown&password=unknown";
var encodedURL= "http://www.foobar.com/foo?imageurl=" + encodeURIComponent(myUrl);

DEMO: http://jsfiddle.net/Lpv53/

146
Niels

En utilisant le nouvel ES6 Object.entries(), il s’agit d’un amusant petit imbriqué map/join:

const encodeGetParams = p => 
  Object.entries(p).map(kv => kv.map(encodeURIComponent).join("=")).join("&");

const params = {
  user: "María Rodríguez",
  awesome: true,
  awesomeness: 64,
  "ZOMG+&=*(": "*^%*GMOZ"
};

console.log("https://example.com/endpoint?" + encodeGetParams(params))
24
Kyle VanderBeek