Passer une URL en tant que paramètre GET en Javascript

J'essaie de créer un bookmarklet qui utilise l'URL actuelle de l'utilisateur, comme le bookmarklet tinyURL qui utilise ce code javascript

javascript:void(location.href='http://tinyurl.com/create.php?url='+location.href) 

J'ai donc copié la même chose et j'ai fait

 javascript:void(location.href='http://mywebsite.com/create.php?url='+location.href) 

Ensuite, j'utilise:

 $url=$_GET['url']; 

Pour le récupérer. Le problème est que si je suis sur une URL qui a déjà des informations de style dans l'url, elle gâche tout.

Exemple, si je suis sur:

 http://www.google.ca/webhp?um=1&hl=en&safe=off 

Le code '_GET' définit $ url pour être

 http://www.google.ca/webhp?um=1 

Je pense donc que l'information dans l'URL de Google gâche toute l'analyse de mes URL, j'imagine que je fais quelque chose de très incorrectement ou que quelqu'un a une solution très élégante pour cela. Que devrais-je faire? Aidez-vous

L'URL a un format spécifié. Cette partie est-elle terminée ? , Ou pour être plus exactement entre ? Et # si existe, est appelé chaîne de requête . Il contient une liste de paires de valeurs-clés: un nom de variable, = caractère et la valeur. Les variables sont séparées par & :

 key1=value1&key2=value2&key3=value3&key4=value4 

Vous devriez échapper à l' location.href car il peut contenir certains caractères spéciaux comme ? , Ou # .

Pour échapper à la chaîne en JavaScript, utilisez la fonction encodeURIComponent() comme encodeURIComponent() :

 location.href = "http://tinyurl.com/create.php?url=" + encodeURIComponent(location.href) 

Il remplacera des caractères comme & dans %26 . Cette séquence de caractères n'est pas traitée comme un séparateur variable, de sorte qu'il sera attaché en tant que valeur d'une variable.

essayer

 javascript:void(location.href='http://mywebsite.com/create.php?url='+encodeURIComponent(location.href)); 
 javascript:void(location.href='http://mywebsite.com/create.php?url='+encodeURIComponent(location.href)) 

Vous devez échapper aux personnages.

Alors qu'est-ce que tu veux, juste l'URL sans la chaîne de requête?

 $url = explode('?',$_GET['url']); $url = $url[0]; 

Pour passer l'URL dans le paramètre $ _GET comme ceci:

 http://yoursite.com/page.php?myurl=http://google.com/bla.php?sdsd=123&dsada=4323 

Alors vous devez utiliser la fonction encode:

 echo 'http://yoursite.com/page.php?url='.urlencode($mylink); //so, your output (url parameter) will get like this //http://yoursite.com/page.php?url=http%3A%2F%2Fgoogle.com%2Flink.php%3Fname%3Dsta%26car%3Dsaab 

Après cela, vous devez décoder le paramètre avec:

 $variab = $_GET['url']; $variab = preg_replace("/%u([0-9a-f]{3,4})/i","&#x\\1;",urldecode($variab)); $variab = html_entity_decode($variab,null,'UTF-8'); echo $variab; 

De cette façon, vous pouvez passer le bon lien comme paramètre.