Récupérer une URL complète dans variable en php

yakipa

WRInaute discret
Salut,

j'ai un fichier qui me permet de rediriger une URL

je fais comme cela :
-http://www.site.com/go.php?red=https://www.google.fr
la variable $red me renvoit bien : https://www.google.fr

Seulement si je fais ca (c'est a dire une URL tres longue avec des param) :
-http://www.site.com/go.php?red=htt [...] L:fr&q=dvd

ca ne me renvoit que :
-https://www.google.fr/search?sourceid=navclient-ff

Il s'arrete au 1er &

Vous auriez une astuce ? car je peux pas basculer vers l'url complète
 

Bacteries

WRInaute passionné
Encore avec une fonction url_encode() ton URL, et au moment de la redirection tu la décode (url_decode()).
 

yakipa

WRInaute discret
En fait cette url sera pas en dur dans une page donc je peux pas l'encoder comme ca

en gros c pour faire un systeme de tracking que je poserai sur des sites
 

Bacteries

WRInaute passionné
Bah alors récupère la variable $_SERVER['QUERY_STRING'], supprime le "red=" et redirige sur cette url.
 

Bacteries

WRInaute passionné
bah fais transforme ta chaine. Si ils sont forcément avant &red ça sera facile, sinon faudra analyser la chaine et espérer que l'url sur laquelle tu diriges n'a pas les mêmes.
 

yakipa

WRInaute discret
oui mes autres params seront forcément avant le $red

ya un moyen de dire "tu recuperes le QUERY STRING apres $red seulement ?
 

Bacteries

WRInaute passionné
Bah vu que t'as la chaine $_SERVER['QUERY_STRING'], suffit de rechercher la position de red= et de recopier $_SERVER['QUERY_STRING'] a partir de la bonne position.

J'ai plus les noms de fonctions php en tête mais ça se fait en deux lignes.
 

Bacteries

WRInaute passionné
j'ai pas de quoi valider mon code mais en gros :
Code:
$pos = strpos('red=', $_SERVER['QUERY_STRING']);
if ($pos === false)
{
   # traitement de l'erreur
}
else
{
   $url = substr($_SERVER['QUERY_STRING'], $pos + 4);
   // ta redirection
}
 

Bacteries

WRInaute passionné
A mon avis t'auras le problème tant que tu fais pas un url_encode sur ton url.

Affiche $_SERVER['QUERY_STRING'] pour voir ce que tu as vraiment dans cette variable.
 

yakipa

WRInaute discret
Lorsque j'affiche tout j'ai bien tout

Mais l'url encode ne marchera pas vu que le lien est pas placé en dur
 

serval2a

WRInaute accro
Bonjour,

Le problème vient du fait que forcément dans ton url les variables que tu utilises et celles de la page que tu veux appeler sont indissociées.
Comment faire comprendre que la variable $red contient non seulement l'adresse d'une page mais également des variables utiles à la page dont par exemple la varibale $q qui ne doit pas être utilisé par ton script mais quand même incrite dans l'url de destination ?

Pour faire simple, tu pourrais (je ne connais pas ton script) récupérer chaque variable utile pour l'inscrire dans chaque url de destination, mais cela t'obligerais à utiliser des conditions pour chaque nom de domaine puisque tous n'utilisent pas les mêmes variables.

La solution semble à mon avis résider plus dans l'utilisation des fonctions serialise() et unserialise() avec le traitement de la seule variable $red.

@+
 

Bacteries

WRInaute passionné
serval2a> la query_string est peut être beaucoup plus simple non??

yakipa> Quand tu dis afficher c'est bien $_SERVER['QUERY_STRING']?

Sinon pas en dur c'est à dire? Dis en plus; car transformer le lien serait plus simple que traiter la chaine.
 

yakipa

WRInaute discret
j'ai fait ca :

$pos = strpos($_SERVER['QUERY_STRING'],'redi=');
if ($pos == false)
{
//echo $_SERVER['QUERY_STRING'];
}
else
{
$url = substr($_SERVER['REQUEST_URI'], $pos + 3);
echo $url;
// ta redirection
}
 

Bacteries

WRInaute passionné
et donc url t'as bien toute ta chaine?

Si oui tu fais un bête header("location:".$url); et ça devrait marcher, non?
 

yakipa

WRInaute discret
Oui je récupère bien toute la chaine, je vais tester sur plusieurs URL et voir si cela fonctionne

merci en tout cas pour le tuyau de la position
 

Discussions similaires

Haut