Javascript 如何将具有多个参数的URL传递到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
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