web-dev-qa-db-fra.com

Comment passer une URL avec plusieurs paramètres dans une URL?

En gros, j'essaie de passer une URL comme ceci:

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

dans une URL comme celle-ci:

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

Il ne reconnaît que le premier paramètre. Je rencontre le même problème avec le partage sur LinkedIn et Twitter, alors ce doit être quelque chose que je fais mal.

47
DormoTheNord

Plutôt que html encoding votre paramètre d'URL, vous devez URL encode il:

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

Vous pouvez le faire facilement dans la plupart des langues - en 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'

(il existe aussi des méthodes équivalentes dans d'autres langues)

75
Dexter

Il vous manque le ? Dans la deuxième URL (il devrait également être codé en tant qu'URL pour être %3F).

De plus, je crois que le & Restant doit être une URL, pas un code HTML. Changez &second=12&third=5 En %26second=12%26third=5 Et tout devrait fonctionner.

Cette:

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

devrait être:

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

Dans jQuery, vous pouvez utiliser:

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

Doc: http://api.jquery.com/jquery.param/ La sortie: first = 1 & second = 12 & third = 5 Ceci le formatera, quel que soit votre objet.

2
SSL46

Dans votre exemple, certaines parties de votre URL transmise ne sont pas encodées (par exemple, les deux points doivent être% 3A, les barres obliques doivent être% 2F). Il semble que vous ayez encodé les paramètres dans votre URL de paramètre, mais pas dans l'URL de paramètre elle-même. Essayez aussi de l'encoder. Vous pouvez utiliser encodeURIComponent.

2
justkt

Je vois que vous avez des problèmes avec les liens de partage social. J'ai eu un problème similaire à un moment donné et j'ai trouvé cette question, mais je ne vois pas de réponse complète à cette question. J'espère que ma résolution javascript ci-dessous aidera:

J'avais des liens de partage par défaut à modifier pour que l'URL partagée comporte des paramètres UTM supplémentaires concaténés.

Mon exemple sera pour le lien de partage social Facebook, mais cela fonctionne pour tous les liens de réseau de partage social possibles:

L'URL à partager était:

https://mywebsitesite.com/blog/post-name

Le lien de partage par défaut ressemblait à:

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

Je l'ai d'abord décodé:

console.log( decodeURIComponent($facebook_default) );
=>
https://www.facebook.com/sharer.php?u=https://mywebsitesite.com/blog/post-name/&t=hello

Ensuite, j'ai remplacé l'URL par la nouvelle URL codée (avec les paramètres UTM concaténés):

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

C'est ça!

Solution complète:

$ 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