web-dev-qa-db-ja.com

複数のパラメーターを持つURLをURLに渡すにはどうすればよいですか?

基本的に私はこのようなURLを渡そうとしています:

www.foobar.com/?first=1&second=12&third=5

このようなURLに:

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

最初のパラメーターのみを認識します。私はLinkedInとTwitterの共有で同じ問題を抱えているので、間違いを犯しているに違いありません。

47
DormoTheNord

URLパラメータをhtml encodingではなく、URL encodeする必要があります。

http://www.facebook.com/sharer.php?&t=FOOBAR&u=http%3A%2F%2Fwww.foobar.com%2F%3Ffirst%3D12%26sec%3D25%26position%3D

ほとんどの言語でこれを簡単に行うことができます- javascript

var encodedParam = encodeURIComponent('www.foobar.com/?first=1&second=12&third=5');
// encodedParam = 'http%3A%2F%2Fwww.foobar.com%2F%3Ffirst%3D12%26sec%3D25%26position%3D'

(他の言語にも同等のメソッドがあります)

75
Dexter

2番目のURLに?がありません(また、%3FになるようにURLエンコードする必要があります)。

また、残りの&はHTMLエンコードではなくURLである必要があると思います。 &second=12&third=5%26second=12%26third=5に変更すると、すべてが正常に機能するはずです。

この:

&u=http://www.foobar.com/first=12&sec=25&position=2

する必要があります:

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

JQueryでは、次を使用できます。

let myObject = {first:1, second:12, third:5};
jQuery.param(myObject);

Doc: http://api.jquery.com/jquery.param/ 出力:first = 1&second = 12&third = 5これにより、オブジェクトに含まれているものは何でもフォーマットされます。

2
SSL46

例では、渡されたURLの一部はURLエンコードされていません(たとえば、コロンは%3Aであり、スラッシュは%2Fである必要があります)。パラメータをパラメータURLにエンコードしているようですが、パラメータURL自体はエンコードしていないようです。同様にエンコードしてみてください。 encodeURIComponentを使用できます。

2
justkt

ソーシャル共有リンクに問題があるようです。ある時点で似たような問題があり、この質問を見つけましたが、完全な答えは見当たりません。以下からの私の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パラメーターを連結したもの)に置き換えました。

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

それでおしまい!

完全なソリューション:

$ facebook_default = $( 'a.facebook_default_link')。attr( 'href');

$( 'a.facebook_default_link')。attr( 'href'、decodeURIComponent($ facebook_default).replace(window.location.href、encodeURIComponent(window.location.href + '?utm_medium = social&utm_source = facebook')));

0
TheoPlatica