如何对网址参数进行编码?

2022-08-30 02:42:57

我正在尝试将参数传递给如下所示的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()encodeURIComponent()


答案 1

使用 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/


答案 2

使用新的ES6,它使一个有趣的小嵌套/:Object.entries()mapjoin

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))