web-dev-qa-db-ja.com

URLパラメータをエンコードする方法は?

次のようなURLにパラメーターを渡そうとしています。

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

また、別のAPIによって生成された画像URLなどのパラメーターと、画像のリンクを次のように渡したいと思います。

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

ただし、URLを使用しようとすると:

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

機能しません。

また、imageURLでencodeURIとencodeURIComponentsを使用しようとしましたが、それも機能しません。

96
Apoorv Saxena

PHPの場合

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

結果

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

Javascriptの場合:

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

デモ: http://jsfiddle.net/Lpv53/

146
Niels

新しいES6 Object.entries()を使用すると、入れ子になった楽しい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