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 :

utf-8 dans un formulaire


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut utf-8 dans un formulaire
    Bonjour,

    j'utilise la balise méta
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    et je n'ai pas de soucis d'affichage d'accent, par contre lorsque dans un formulaire j'écris avec des accents, je vois dans mon IDE que les caractères sont transformés de cette manière : "é", "î", "Ã", ... donc php 5.3 que j'utilise ne saurais pas lire par défaut le utf-8 ?

    Du coup j'utilise la fonction utf8_decode(), mais puis je faire en sorte que php reconnaisse directement le utf-8 ?

    Merci.

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Bonjour,

    Dans ton IDE, le fichier php du formulaire et le fichier qui affiche le résultat sont-ils encodés en utf-8 ?

    -

  3. #3
    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
    La preuve que si puisqu'il sait l'encoder et le decoder avec utf8_decode/encode.
    PHP n'a de toute facon pas besoin de connaitre l'encodage des données qu'il fait transiter.

    Mais a part dans ton EDI, ou est le problème ?

  4. #4
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    J'ai un fichier qui contient la balise meta avec le charset utf-8, qui inclu d'autre pages dont celle du formulaire et celle à afficher, donc je pense que toute les pages sont bien encodés en utf-8.

    En fait le soucis est pour la vérification de valeurs, par exemple cette expression régulière
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $expreg = '/\A[\w]+[\w._-]*\z/u';
    l'option u est censée traiter les chaines utf-8, mais elle ne reconnait que les é et non les é..

  5. #5
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Citation Envoyé par Drone Voir le message
    J'ai un fichier qui contient la balise meta avec le charset utf-8, qui inclu d'autre pages dont celle du formulaire et celle à afficher, donc je pense que toute les pages sont bien encodés en utf-8
    la balise meta indique au navigateur quel est le charset de la page qu'il reçoit. de même que l'instruction header('Content-Type: text/html; charset=utf-8') en php.

    cela ne veut pas dire que les fichiers *.php sont encodés eux en utf-8...

  6. #6
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Vous m'avez mis un doute, j'ai donc converti un a un dans notepad++ les fichiers en utf-8, mais je pense que cela résoudrait des éventuels problème d'affichage ?

    Je dis cela car mes variables du tableau $_post arrive toujours avec des é.

    Mais je me dis que c'est peut être normal, car le utf-a transforme automatiquement les é en é, et dans php je dois faire un decode pour pouvoir les traiter ?

  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
    Si tu obtiens un affichage normal en utilisant utf8_decode() c'est que ton fichier d'arrivé n'affiche pas du UTF8.

  8. #8
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Pour l'affichage j'ai aucun problème c'est au niveau de mes variables php, par exemple si j'essaie ce petit script
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
      1.<html xmlns="http://www.w3.org/1999/xhtml">
       2.    <head>
       3.         <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
       4.         <link rel="stylesheet" media="screen" type="text/css" title="Feuilledestyle" href="design.css"/>
       5.         <title>Site '...'</title>
       6.    </head>
       7.<body>
       8.
       9.
      10.<form method="post" action="test.php" enctype="multipart/form-data">
      11.
      12.
      13.<label for="nom_user">Votre variable:</label> <input type="text" name="nom_user"  size="35"/>
      14.<input type="submit" name="ok" value="ok"/>
      15.</form>
      16.
      17.<?php
      18.
      19.if (!empty($_POST['nom_user'])) {
      20.
      21.echo 'La variable est '.$_POST['nom_user'];
      22.echo ' et à une longueur de '.strlen($_POST['nom_user']).' caractères.';
      23.}
      24.
      25.?>
      26.
      27.</body>
      28.</html>
    Lorsque j'écris ééé, j'ai comme résultat :

    La variable est ééé et à une longueur de 6 caractères.

    Car dans php il est en fait écrit ééé, est ce que cela vous fait la même chose ?

  9. #9
    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
    En UTF8 il faut utiliser les fonction mb_
    donc mb_strlen() et non strlen().

    Car dans php il est en fait écrit ééé
    Il n'est en fait écrit ni l'un ni l'autre. PHP ne manipule que les bytes.

  10. #10
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Oula ce sont quoi toutes ces fonctions , décidément j'en apprends tout les jours ! Mais donc pour les caractères utf-8 il faut seulement utiliser des fonctions php adapté ?

    Par exemple pour ma fonction preg_match($expreg,$valeur), je suis obligé d'utiliser un mb_ereg_match($expreg,$valeur) ?

    Ne vaut-il pas mieux selon toi que je fasse un utf8_decode/encode entre le traitement de mes valeurs ?

    Merci en tout cas, c'est très instructif.

  11. #11
    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
    preg_match() sait traiter l'utf8, a condition de lui indiquer le modificateur "u".
    http://php.net/manual/fr/reference.p....modifiers.php

  12. #12
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Pourtant mon expression régulière est bien la suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $expreg = '/\A[\w]+[\w._-]*\z/u';
    C'est justement ce que je demandais plus haut .

    Mais je ne sais pas pourquoi le u reconnait les caractères comme le é et non celui comme le é.

  13. #13
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    As-tu pensé à mettre, comme l'a dit ska_root,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    header('Content-Type: text/html; charset=utf-8')
    tout en haut de ton code php ?

    Il est très probable que le serveur envoie par défaut une entête au format iso.
    Et les entêtes php prennent le pas sur les déclarations html

    Et puis quand c'est possible évites de mettre du php dans ton html. Dans ton cas tu pourrais tout aussi bien le mettre en haut de page avant le code html.

  14. #14
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    J'ai essayé cela ne change rien, comme dit plus haut l'affichage de la page ne pose pas de problème, ce que je ne comprenais pas c'est que l'utf8 demandais des fonctions php particulières.

    Pour mon expression régulière, le problème ne semble finalement pas venir de utf-8, car même après un decode l'expression suivante ne fonctionne pas, ce que je ne comprend pas car hier elle fonctionnait bien :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $expreg = '/\A[\w]+[\w._-]*\z/u';

  15. #15
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 389
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 389
    Points : 10 422
    Points
    10 422
    Par défaut
    Tu dois bien avoir un pb quelque part car si j'écris ce code (identique au tiens)
    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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    <?php
    header('Content-Type: text/html; charset=utf-8');
    if (!empty($_POST['nom_user'])) {
     
    echo 'La variable est '.$_POST['nom_user'];
    echo ' et à une longueur de '.mb_strlen($_POST['nom_user'],'utf-8').' caractères.';
    }
     
    ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <title>Document sans titre</title>
    </head>
     
    <body>
     
    <form method="post" action="#">
     
    <label for="nom_user">Votre variable:</label> <input type="text" name="nom_user"  size="35"/>
    <input type="submit" name="ok" value="ok"/>
    </form>
     
    </body>
    </html>
    avec php5.3 sur le serveur dévaluation (wampserveur), quand j'écris ééé dans le champ du formulaire cela me retourne bien :
    "La variable est ééé et à une longueur de 3 caractères."

    Et au passage tu ne dois pas avoir besoin d'utiliser utf8_decode/encode si tout ton encodage est cohérent d'un bout à l'autre (entêtes php, html, bdd et enregistrement du fichier encodé en utf-8)

  16. #16
    Membre régulier
    Inscrit en
    Mars 2008
    Messages
    112
    Détails du profil
    Informations personnelles :
    Âge : 37

    Informations forums :
    Inscription : Mars 2008
    Messages : 112
    Points : 112
    Points
    112
    Par défaut
    Salut,
    oui ce que je voulais savoir au début c'est si dans mes variables php c'était normal quelle affiche dans le débogueur des é, mais voilà comme je le pensais c'est en fait normal et pour la fonction de longueur, j'ai bien compris que je n'utilisais pas les bonnes variables comme me la expliqué sabotage, maintenant mon seul soucis est de comprendre pourquoi mon expression régulière pourtant dotée de l'option u, ne fonctionne plus, mais c'est un autre sujet donc je vais tenter de trouver la solution seul et j'ouvrirais un autre topic au cas ou, merci en tout cas.

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

Discussions similaires

  1. Encodage UTF-8 dans formulaire et preg_replace
    Par dawadam dans le forum Langage
    Réponses: 14
    Dernier message: 01/09/2009, 01h00
  2. Forcer la saisie en MAJ dans un Formulaire
    Par lolos dans le forum IHM
    Réponses: 4
    Dernier message: 12/08/2003, 11h57
  3. Réponses: 3
    Dernier message: 19/03/2003, 16h19
  4. Réponses: 2
    Dernier message: 12/02/2003, 16h26
  5. [CR][Access] intégrer un viewer dans un formulaire access
    Par nicolak dans le forum SAP Crystal Reports
    Réponses: 7
    Dernier message: 13/01/2003, 16h52

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