lorik Posté 21 Juin 2005 Posté 21 Juin 2005 Bonjour à tous, Au menu aujourd'hui une nouvelle question tordue ! Dans un script, je passe en variable dans l'url une autre url . Je m'explique : Ma page1.php est appellée par exemple par google : Ma page1.php à donc un referrer du type : http://www.google.fr/search?q=mes+mots+clés. Dans ma page1.php, je recupère ce referrer, et je le passe par l'url à ma page2.php. L'url affichée dans ma page2.php est donc : page2.php?var=http://www.google.fr/search?q=mes+mots+clés Je me trouve donc avec 2 '?' dans mon url. et je veux récuperer 'mes+mots+clé'. Je fait donc bètement un $_GET[q]. globalement, ça marche, mais dans 5 à 10% des cas, $_GET[q] est vide, alors que les données sont bien présentes dans l'url. Je vois pas trop l'origine de l'erreur, sauf à dire que $_GET aime pas les dubles '?', mais encore une fois, ça marche dans 90% des cas...
Ganf Posté 21 Juin 2005 Posté 21 Juin 2005 *Toujours* faire des échappements. Tu envoies des données en SQL ? addslashes, mysql_real_escape_string() ou l'équivalent dans ton SGBD. Tu envoies des données en HTML ou XML ? htmlspecialchars() Tu envoies des données dans une URL ? urlencode() Tu envoies des données dans un fichier texte brut ? probablement un iconv() pour gérer les jeux de caractères Si tu as ce genre d'erreur c'est que tu as envoyé une chaîne de texte directement en sortie sans la transformer ou lui appliquer un échappement. Tu ne devrais jamais faire ça. Ici tu as des URL, c'est un codage qui se fait avec urlencode(). La fonction inverse (que tu ne devrais quasiment jamais appeler vu que PHP gère ça tout seul) est urldecode().
lorik Posté 21 Juin 2005 Auteur Posté 21 Juin 2005 Merci Ganf, j'utilisais en fait : $url=utf8_decode(urldecode($_GET[q])); Sans plus de succès. Par contre, c'est vrai que les données n'étaient pas encodées au départ. Du coup, un autre souci (mais à voir sur un autre forum), c'est que l'url est générée en Javascript. Et je ne sais pas si on peut encoder en JS...
Ganf Posté 21 Juin 2005 Posté 21 Juin 2005 Sauf que le décodage est déjà fait par PHP, ce qu'il te faut faire c'est l'encodage. On doit pouvoir encoder en js, au pire par une expression rationnelle sortie des tiroirs, mais là pour le coup je n'ai pas de pistes à te donner. en PHP ça serait quelque chose comme $url = 'xxxxx?var='.urlencode($oldUrl) ;
lorik Posté 21 Juin 2005 Auteur Posté 21 Juin 2005 Une info de plus : le problème ne se pose qu'avec google. Pour les autres moteurs, $_GET fonctionne sans problème. On m'avait (un fois de plus !) dépanné sur ce forum, c'est pour ça que je rajoute un utf-8, puisque il semble que Google utilise ce truc (je sais pas exacetement ce que c'est...). J'ai commencé à grenouiller sur les forum JS, mais manifestement, ça l'fait pas
Ganf Posté 21 Juin 2005 Posté 21 Juin 2005 Une info de plus : le problème ne se pose qu'avec google. Le problème va se poser avec toutes les url qui contiennent un caractère interprétable (en l'occurence un "&"). Il se trouve que tes URL google en ont, que visiblement tes autres URL de test n'en ont pas, mais ça n'a rien de spécifique à google. En gros tout ce qui est à partir le premier "&" dans l'ancienne URL ne sera pas récupéré (parce que PHP interprétera ça comme un nouveau paramètre de l'url actuelle et pas comme la suite de l'ancienne URL)
lorik Posté 21 Juin 2005 Auteur Posté 21 Juin 2005 Merci Ganf, En effet, finalement, d'autres moteurs sont parfois concernés. J'ai contourné le problème en traitant la chaine de caractère. Je trouve ça pas propre et plus long, mais bon, on fait ce qu'on peut ! Je reste ouvert aux suggestions
Jok Posté 22 Juin 2005 Posté 22 Juin 2005 Tu devrai regarder du coté de la superglobale $_SERVER, notamment $_SERVER["QUERY_STRING"] Qui te retourne pour cet exemple page2.php?var=http://www.google.fr/search?q=mes+mots+clés la chaine de caractere var=http://www.google.fr/search?q=mes+mots+clés. A toi ensuite de traiter la chaine de caractere pour récupérer les infos que tu souhaite.
lorik Posté 24 Juin 2005 Auteur Posté 24 Juin 2005 Merci Jok, c'est effectivement ce que j'avais fait. Plus logn que $_GET, mais ça marche...
Jok Posté 24 Juin 2005 Posté 24 Juin 2005 (modifié) Ouep c'est plus long. Mais au moins t'es tranquille Modifié 24 Juin 2005 par Jok
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant