Javascript 如何将具有多个参数的URL传递到URL?

Javascript 如何将具有多个参数的URL传递到URL?,javascript,html,query-parameters,Javascript,Html,Query Parameters,基本上,我正在尝试传递一个URL,如下所示: www.foobar.com/?first=1&second=12&third=5 http://www.facebook.com/sharer.php?&t=FOOBAR&u=http://www.foobar.com/first=12&sec=25&position=2 进入如下URL: www.foobar.com/?first=1&second=12&thir

基本上,我正在尝试传递一个URL,如下所示:

www.foobar.com/?first=1&second=12&third=5
http://www.facebook.com/sharer.php?&t=FOOBAR&u=http://www.foobar.com/first=12&sec=25&position=2
进入如下URL:

www.foobar.com/?first=1&second=12&third=5
http://www.facebook.com/sharer.php?&t=FOOBAR&u=http://www.foobar.com/first=12&sec=25&position=2

它只识别第一个参数。我在LinkedIn和Twitter共享上也遇到了同样的问题,所以这一定是我做错了什么。

第二个URL中缺少了
(同样,它应该是URL编码为
%3F

另外,我认为剩下的
&
需要是URL,而不是HTML编码的。将
&second=12&third=5
更改为
%26second=12%26third=5
,一切正常

这:

应该是:

&u=http://www.foobar.com/%3Ffirst=12%26sec=25%26position=2

你必须避开这个角色。转身

&
进入


您应该很好。

在您的示例中,传入URL的部分不是URL编码的(例如冒号应该是%3A,正斜杠应该是%2F)。看起来您已经将参数编码到了参数URL,但没有编码到参数URL本身。还可以尝试对其进行编码。您可以使用
encodeURIComponent

而不是
html编码
您的URL参数,您需要
URL编码
它:

http://www.facebook.com/sharer.php?&t=FOOBAR&u=http%3A%2F%2Fwww.foobar.com%2F%3Ffirst%3D12%26sec%3D25%26position%3D
您可以在大多数语言中轻松完成此操作-:


(其他语言中也有相同的方法)

在jQuery中,您可以使用:

let myObject = {first:1, second:12, third:5};
jQuery.param(myObject);
文件: 输出:第一个=1,第二个=12,第三个=5
这将格式化它,不管你的对象包含什么。

我发现你的社交共享链接有问题。我在某个时候也遇到过类似的问题,发现了这个问题,但我没有看到完整的答案。 我希望下面的javascript解析能有所帮助:

我有需要修改的默认共享链接,以便共享的URL将连接其他UTM参数

我的例子是Facebook社交共享链接,但它适用于所有可能的社交共享网络链接:

需要共享的URL为:

https://mywebsitesite.com/blog/post-name
默认的共享链接如下所示:

$facebook_default = "https://www.facebook.com/sharer.php?u=https%3A%2F%2mywebsitesite.com%2Fblog%2Fpost-name%2F&t=hello"
我首先破译了它:

console.log( decodeURIComponent($facebook_default) );
=>
https://www.facebook.com/sharer.php?u=https://mywebsitesite.com/blog/post-name/&t=hello
然后,我用编码的新URL替换URL(连接UTM参数):

就这样

完整解决方案:

$facebook\u default=$('a.facebook\u default\u link').attr('href')

$('a.facebook\u default\u link').attr('href',decodeURIComponent($facebook\u default)。替换(window.location.href,encodeURIComponent(window.location.href+'?utm\u medium=social&utm\u source=facebook))


Web服务器不知道HTML实体,字符必须用URI编码;但它不起作用。我需要%31。现在我只使用Javascript的encode()函数^_^该实体称为&;,非&;——他为了英语的目的把它多元化了……)我编辑得更清楚一些。但无论如何%31更好。实际上应该是%26来转义&。也许是时候删除这个答案了:)还可能需要对URL中的冒号和斜杠进行编码。@Dormothenard--
%31
是个错误。。。应该是
%3F
@Ferdinand-我想您需要
encodeURIComponent
,它对所有URL字符进行编码
encodeURI
不编码:和/等字符。很抱歉,这是一个输入错误。我正在使用encodeURIComponent@justkt:是的,你说得对。实际上,我的意思是
escape()
而不是
encode()
,但是
encodeURIComponent()
可能更好。如果查询字符串中的每个参数都有古怪的字符,你不需要对其进行编码吗?在我的回答中,我假设URL的值在编码为作为参数传递之前已经有效/正确构造。即使URL无效,上面的方法也可以很好地工作,但是如果URL无效,您当然无法在另一端有效地使用它
console.log( decodeURIComponent($facebook_default) );
=>
https://www.facebook.com/sharer.php?u=https://mywebsitesite.com/blog/post-name/&t=hello
console.log( decodeURIComponent($facebook_default).replace( window.location.href, encodeURIComponent(window.location.href+'?utm_medium=social&utm_source=facebook')) );

=>

https://www.facebook.com/sharer.php?u=https%3A%2F%mywebsitesite.com%2Fblog%2Fpost-name%2F%3Futm_medium%3Dsocial%26utm_source%3Dfacebook&t=2018