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 :

$_GET, utf-8 et accents


Sujet :

Langage PHP

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut $_GET, utf-8 et accents
    Bonjour,

    J'ai une page encodée en utf-8 avec un formulaire dont voici les éléments principaux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    <html>
    <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    </head>
    <body>
     
     <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="get">
      <input type="text" name="q" value="" />
      <input value="Go !" type="submit" />
     </form>
     
    <?php echo @$_GET['q']; ?>
     
    </body>
    </html>
    Lorsque je rentre un mot contenant des accents dans l'input (par exemple "mémé"), le écho renvoie bien mémé et l'adresse de la page ressemble à ceci: test.php?q=m%C3%A9m%C3%A9

    Par contre, si je tape moi-même l'adresse (donc http://.../test.php?q=mémé), le navigateur la remplace par test.php?q=m%E9m%E9 (ce qui correspond, si j'ai bien compris, à un urlencode en iso?) et mon echo me donne ces caractères horribles: m�m�

    J'ai essayé de jouer avec des fonctions comme (raw)url_encode/decode,utf8_encode/decode sans succès.

    Merci d'avance.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 043
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 043
    Points : 8 075
    Points
    8 075
    Billets dans le blog
    17
    Par défaut
    Citation Envoyé par DrY_GiN Voir le message
    Lorsque je rentre un mot contenant des accents dans l'input (par exemple "mémé"), le écho renvoie bien mémé et l'adresse de la page ressemble à ceci: test.php?q=m%C3%A9m%C3%A9
    OK.

    Par contre, si je tape moi-même l'adresse (donc http://.../test.php?q=mémé), le navigateur la remplace par test.php?q=m%E9m%E9 (ce qui correspond, si j'ai bien compris, à un urlencode en iso?)
    Oui, le navigateur fait un urlencode( ) de ce que tu as tapé. Et ce que tu tapes dans la barre d'adresse est en ~ISO-8859-1

    et mon echo me donne ces caractères horribles: m�m�
    Oui, car tes caractères urlencodés sont en ~ISO-8859-1 et ne sont donc pas correctement affichés en UTF-8.

    J'ai essayé de jouer avec des fonctions comme (raw)url_encode/decode,utf8_encode/decode sans succès.
    Hum pourtant j'aurai bien senti un utf8_encode( ).

    Question : pourquoi veux-tu passer par une saisie dans l'URL ?? Tu risques de ne pas savoir le traitement à apporter à la chaîne $_GET['q'].
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    En effet, utf8_encode fonctionne bien, mais lorsque je réutilise le formulaire normalement (en entrant mémé dans le input), le utf8_encode se fait sur un texte qui est déjà en utf8. Ce qui donne également un résultat horrible..

    Mais s'il y a un moyen de voir si l'argument passé en GET est en utf8 ou non, alors ça réglerait mon problème.


    Sinon, je veux faire ça pour éviter que lorsque quelqu'un change l'url lui même, ou bien qu'un autre site en iso, qui a par exemple un formulaire+une frame qui effectuent une recherche sur mon site, ne donne lieu à ces caractères ��.

  4. #4
    Membre confirmé Avatar de SphynXz
    Développeur Web
    Inscrit en
    Mars 2008
    Messages
    439
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mars 2008
    Messages : 439
    Points : 547
    Points
    547
    I don't know what will be used in the next world war, but the 4th will be fought with stones. - Albert Einstein
    Pour détourner un avion, il faut monter dedans - Frédéric beigbeder

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Merci beaucoup, ça fonctionne à merveille!

    Et juste une dernière chose, est-ce que j'utilise bien la fonction mb_detect_encoding ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $encoding = mb_detect_encoding(@$_GET['q'],'UTF-8,ISO-8859-1');
    if($encoding == 'ISO-8859-1')
    	echo utf8_encode(@$_GET['q']);
    else
    	echo @$_GET['q'];

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

Discussions similaires

  1. Formulaire en utf-8 remplaces accents par des "?"
    Par seoguy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 25/04/2013, 17h06
  2. JDOM xml en utf-8 avec accents
    Par Airdine dans le forum Format d'échange (XML, JSON...)
    Réponses: 1
    Dernier message: 28/05/2011, 17h33
  3. Réponses: 5
    Dernier message: 11/07/2010, 15h07
  4. [XSLT] encoding UTF-8 et accents
    Par Lolitaaa dans le forum XSL/XSLT/XPATH
    Réponses: 12
    Dernier message: 26/11/2008, 17h11
  5. [WebForms] Encodage, UTF-8 et accents
    Par alexischmit dans le forum Général Dotnet
    Réponses: 4
    Dernier message: 28/04/2004, 13h21

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