IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Header location, "&" s'affiche dans l'url [Encodage]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut Header location, "&" s'affiche dans l'url
    Bonjour,

    C'est la première fois que j'ai ce problème, après un header('location:...'), mon url se retrouve encodé avec &.
    J'ai vérifier l'url après le passage en post, mais ça ne vient pas de la.

    L'url que je dois utiliser se compose comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monsite.fr/mapage.php?var1=x&var2=y
    , après la redirection celle-ci est transformé en :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monsite.fr/mapage.php?var1=x&var2=y
    Ce qui pose problème car mes variables get ne fonctionnent plus.

    J'ai essayer urlencode mais rien à faire, c'est même pire

    Comment avoir mon url propre après le header ?

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    A quoi ressemble ton code header actuel ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Un header location tout bête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    header('location:'.$url);
    $url étant la variable passé en post après avoir récupéré l'url en php ($_SERVER) ou plutôt $request->server('...') vu que j'utilise les sessions (et tout se qui va avec) de phpbb pour certains éléments de mon site.

    Récupération de l'url dans la page formulaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $host = $request->server('HTTP_HOST');
    $uri = $request->server('REQUEST_URI');
    $url =  "http://".$host.$uri;
    que je transmet en post

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <input type="hidden" name="url" value="'.$url.'" />
    Le header dans la page de traitement, pour le moment vide.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    $url = $request->variable('url','',true);
    header('location:'.$url);
    Et même si l'adresse est en "clair" dans la page de traitement, le header me l'encode en remplaçant les "&" par "&amp;".

    Edit : Je précise que ce n'est pas la première fois que j'utilise cette manip pour revenir à la page de départ après traitement, mais je n'avais jamais eu de problème avant. Au début je pensais que c'était lié au système de phpbb mais vu que l'url est bien transmise ...

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Si tu fais un echo de l'url au lieu d'un header et que tu regardes la source HTML, l'url est encodé ou pâs ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Non, comme précisé au début, le passage du formulaire au traitement se passe sans encombre, c'est uniquement au passage du header que l'url se retrouve encodé.

    J'ai quand même vérifier avec un echo, mais rien à signaler de ce coté.

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    un simple echo ne permet pas de distinguer (à l'affichage) & de &amp;.
    Il faut un var_dump :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    $url = $request->variable('url','',true);
    var_dump( $url );

    Cela dit, as-tu entendu parler de urlencode() ?

  7. #7
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Quand on regarde la source HTML on voit bien si on a & ou &amp;
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Oui j'ai utilisé urlencode(), ça n'a fait qu'empirer les choses.

    C'est bien le header qui pose problème, j'ai fait un test tout bête au cas ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $url = $request->variable('url','',true);
    $urlF = str_replace("amp;","",$url);
    header('location:'.$urlF);
    L'url est toujours codé.

    un simple echo ne permet pas de distinguer (à l'affichage) & de &amp;.
    En fait dans ce cas si, puisque les "&" c'est moi qui les ai mis pour passer des infos par l'url, je sais donc exactement ou ils sont censé être, et que le header me les a encoder en "&amp;".

    Edit : en faisant ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $msg = '<a href="'.$url.'">'.$url.'</a>';
    j'ai confirmation que c'est bien le header. Le texte affiché est sans encodage, et lorsque je clique sur le lien, je reviens bien à la bonne page sans erreur dans l'url.

  9. #9
    Invité
    Invité(e)
    Par défaut
    Pour faire simple, ce n'est pas le header. Des tonnes de personnes n'ont pas ce problème il n'y a aucune raison que ce soit le cas chez toi.

    Ensuite, quand on debug, on ne considère pas qu'on 'sait'. On part du problème et on remonte à la source. Dans ton cas, comme conseillé par d'autres, un var_dump de ton url juste avant l'appel du header (et un exit pour pas déclencher le header et pouvoir lire le retour du dump) afin de voir ce que tu as vraiment.

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    J'ai bien précisé que même moi je n'avais jamais eu ce problème avant.

    Le var_dump me retourne un mélange des deux, "&" et "&amp;". Le premier get ne marche pas (&amp, mais le second oui (&).

    Donc pour résumé,
    var_dump => un seul "&" est encodé sur les deux,
    header => les deux sont encodés.

    Après c'est peut être lié à wamp, mais pourquoi n'ai je jamais eu ce problème avant ? Est ce que finalement phpbb pose problème sur la finalité de l'action (header) ? ...

    Citation Envoyé par Mrsky Voir le message
    ... On part du problème et on remonte à la source...
    C'est ce que j'ai fait avant de demander de l'aide

    Quand j'utilisais les super globales je n'avait pas ce problème, c'est seulement depuis que phpbb me force à utiliser common.php. $_GET et $_POST sont remplacés par $request->variable(), $_SERVER par $request->server().
    C'est peut être lié ?

    En fait toutes les super globales sont remplacé par $request->..., ca fonctionne, je récupère ce que je veux, mais peut être que ça pose problème, je suis perdu là.

  11. #11
    Invité
    Invité(e)
    Par défaut
    Surtout, ne nous montre pas le résultat du var_dump...

    On risquerait de trouver... re-


    Et oui, il semble intéressant de se pencher sur $request->variable()...

  12. #12
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    C:\wamp64\www\monsite\site\traiteComme.php:30:string 'http://localhost/monsite/site/fiche.php?cat=val1&amp;type=val2&nom=val3#commentaires' (length=84)
    Voila le var_dump

  13. #13
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Maxime50 Voir le message
    ...Le var_dump me retourne un mélange des deux
    Rien que ça devrait te mettre la puce à oreille et attiser ta curiosité : pourquoi l'un et pas l'autre ??

    Partant de là, il faut :
    • remonter pour savoir où et comment ont été créés le 1er (&amp et le 2ème (&)
    • comparer les 2 scripts à la recherche de la différence qui fait que l'un affiche &amp; et l'autre &
    • ...
    • et chercher comment fonctionne précisément $request->variable().



    "La vérité est (probablement) ailleurs..."

  14. #14
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    L'url est en deux partie :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    $host = $request->server('HTTP_HOST');    // Même action que $_SERVER['HTTP_HOST']
    $uri = $request->server('REQUEST_URI');    // Même action que $_SERVER['REQUEST_URI']
    $url =  'http://'.$host.$uri.'#commentaires';
    Puis je transmet $url via un input hidden vers la page de traitement qui n'en est pas une pour le moment, et je récupère la valeur de l'input via
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $url = $request->variable('url','',true);    // Même action que $_POST['url']
    Jusque là pas de problème, l'url est "propre" d'ailleurs, comme je l'ai dis plus haut, si je fait un lien cliquable, tout fonctionne bien.
    J'ai l'impression que ça bugg quand je remet une couche de php dessus.

    Ca ça fonctionne, url propre et au clic je retourne bien ou je veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    <a href="'.$url.'">'.$url.'</a>
    Donne : http://localhost/monsite/site/fiche.php?cat=val1&type=val2&nom=val3#commentaires
    Mais ça rien à faire, ca me retourne toujours une ou plusieurs erreur

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    header('location:'.$url);
    Donne : http://localhost/monsite/site/fiche.php?cat=val1&amp;type=val2&amp;nom=val3#commentaires
    ou

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    var_dump($url);
    Donne : http://localhost/monsite/site/fiche.php?cat=val1&amp;type=val2&nom=val3#commentaires
    Edit : En testant avec les super globales sur une page de test sans phpbb, plus de problèmes, donc je dirais que ça viens bien de phpbb avec ses $request->...

    Je vais allé embêter un peu les membres du forum phpbb, encore ^^, parce que oui, phpbb c'est galères

    Voilou Agent Mulder, si vous avez des idées elles sont les bienvenues.

  15. #15
    Invité
    Invité(e)
    Par défaut
    Le header n'est pas en cause, l'url que tu lui passes n'est deja plus bonne, il faut trouver ou ton & devient un &amp;

    Je pense que jreaux62 a raison et que le $request->variable() a une bonne tete de coupable, il est possible que cette methode passe les variables post dans une fonction similaire a htmlspecialchars() qui ferait la conversion. Essaye de comparer la variable $_POST native avec le retour de $request->variable().

    Beaucoup moins probable mais possible, verifie en regardant la source que le lien cliquable ne soit pas deja converti. Que le lien fonctionne peut etre une interpretation du navigateur.

  16. #16
    Membre régulier
    Profil pro
    Inscrit en
    Août 2009
    Messages
    92
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 92
    Points : 70
    Points
    70
    Par défaut
    Dans le code source le lien est bon, pas d'encodage. Et lorsque je clique je vais à la bonne page.

    Edit : Après voir fouillé quelques fichier de configuration de phpbb (j'ai les yeux qui pique ^^ ), j'ai trouvé d'où venait le problème. Et Mrsky, vous avez vu juste, il faut faire un htmlspecialchars_decode() pour avoir le bon lien. Le header était bien en cause, mais à cause de phpbb qui le bidouille. Voila ce qui m'a fait comprendre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $host = htmlspecialchars_decode($request->header('Host', $request->server('SERVER_NAME')));
    C'est pour ça que dans le lien tout allait bien mais que le header plantait !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Adresse ip qui s'affiche dans l'url
    Par baggie dans le forum Domaines
    Réponses: 5
    Dernier message: 23/12/2015, 10h07
  2. [MySQL] Récupérer la valeur s'affichant dans une url
    Par boubout dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 02/03/2010, 22h32
  3. Réponses: 2
    Dernier message: 07/07/2006, 18h12
  4. Afficher un & (commercial) dans une URL
    Par manu1407 dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 26/04/2006, 15h15
  5. header('Location:$url') VS session_start()
    Par Paniez dans le forum Langage
    Réponses: 2
    Dernier message: 02/12/2005, 22h30

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo