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

Publications (X)HTML et CSS Discussion :

Encoder son site en UTF-8 sans manquer une étape


Sujet :

Publications (X)HTML et CSS

  1. #1
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 827
    Points
    14 827
    Par défaut Encoder son site en UTF-8 sans manquer une étape
    Hello,

    Je vous présente mon nouveau tutoriel qui va vous guider dans le passage d'un site en UTF-8 en reprenant toutes les étapes à ne pas manquer, ainsi que les différentes alternatives en fonction de votre environnement de travail.

    N'hésitez pas à me faire part de vos remarques, questions et suggestions dans cette discussion.

    Bonne lecture à tous !

  2. #2
    Rédacteur

    Avatar de Bovino
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juin 2008
    Messages
    23 647
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2008
    Messages : 23 647
    Points : 91 220
    Points
    91 220
    Billets dans le blog
    20
    Par défaut
    Salut !

    Merci pour cet excellent (comme toujours ) tutoriel qui permettra à beaucoup de mieux comprendre la chaîne complète de l'encodage des caractères.
    Je pense que c'est effectivement une ressource qui manquait !

  3. #3
    Rédacteur
    Avatar de Macmillenium
    Homme Profil pro
    Développeur front-end
    Inscrit en
    Mars 2008
    Messages
    2 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur front-end
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2008
    Messages : 2 333
    Points : 3 748
    Points
    3 748
    Par défaut

  4. #4
    Membre émérite Avatar de franculo_caoulene
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    2 880
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 2 880
    Points : 2 953
    Points
    2 953
    Par défaut
    Bravo et merci pour ce document! On aura enfin un lien vers lequel pointer lorsque la question sera posée.

  5. #5
    Membre actif
    Inscrit en
    Mars 2004
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 290
    Points : 217
    Points
    217
    Par défaut
    Bravo pour cet article !

    Les explications sur l'encodage UTF8 general et unicode sur MySQL étaient bienvenues.
    Bien penser à en faire de même pour les traitements AJAX.

  6. #6
    Membre émérite Avatar de HiRoN
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    2 035
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 2 035
    Points : 2 589
    Points
    2 589
    Par défaut
    Citation Envoyé par Macmillenium Voir le message
    +1...

  7. #7
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    Bonjours,

    j'ai deja subit un site qui tentait de faire de l'utf-8.
    Le probleme étant que, par exemple, les données reçues via post/get étaient en latin1. Sur ce site, il fallait donc faire des utf8_encode() à tout bout de champ...
    Par curiosité, ce memo résout-il le pb, et si oui, à quel niveau?
    (j'ai survolé l'article sans trouvé de réponse)

  8. #8
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 827
    Points
    14 827
    Par défaut
    @hansaplast : Personnellement je n'ai vu aucun soucis de ce type dans mes tests. Les développeurs du site sur lequel tu bossais avaient dû louper une (ou plusieurs) étape, comme l'enregistrement du fichier en UTF-8 sans BOM par exemple.

    Si on prend ce code et qu'on enregistre le fichier en UTF-8 sans BOM, on peut voir qu'il n'y a pas de soucis d'accent :

    Code php : 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
    <?php
    header( 'content-type: text/html; charset=utf-8' );
    ?>
    <!DOCTYPE html>
    <html>
    <head>
       <meta charset="utf-8" />
       <title>UTF-8</title>
    </head>
    <body>
     
    <pre>
       <?php
       print_r( $_POST );
       ?>
    </pre>
     
    <form action="" method="post">
       <p><input type="submit" value="Valeur accentuée" name="soumettre" /></p>
    </form>
     
    </body>
    </html>

    Après, comme dit dans mon tutoriel, si tu étais obligé d'utiliser utf8_encode() pour afficher correctement des caractères encodés en UTF-8, c'est que ton serveur renvoyait de l'ISO.

    Bref, plusieurs pistes à approfondir pour résoudre ton problème.

    Et si tu as l'occasion de démontrer qu'il manque quelque chose à ce niveau là dans le tutoriel avec un exemple que tu avais à l'époque et qui ne fonctionne toujours pas en ayant apporté les modifications nécessaires, tu peux toujours nous en faire part pour qu'on corrige le tutoriel.

  9. #9
    Membre régulier
    Profil pro
    Développeur Web
    Inscrit en
    Février 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2009
    Messages : 46
    Points : 74
    Points
    74
    Par défaut
    Bonjour

    Je vient de tomber sur le tutoriel qui est plutôt pas mal, mais je ne comprend pas l'Intérêt d'utiliser utf8_decode ou utf8_encode si tout le site passe en utf-8.

    L'Intérêt d'utiliser l'encodage ou le décodage est pour les endroit du site qui ne sont peut être PAS en utf-8... non?

    Désolé si je me trompe, ou si j'ai mal compris l'utilisation dans le tutoriel/cour.

    Sky

  10. #10
    Membre éclairé Avatar de hansaplast
    Homme Profil pro
    Artisant logiciel
    Inscrit en
    Septembre 2005
    Messages
    949
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Artisant logiciel
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 949
    Points : 730
    Points
    730
    Par défaut
    Citation Envoyé par Bisûnûrs Voir le message
    Si on prend ce code et qu'on enregistre le fichier en UTF-8 sans BOM, on peut voir qu'il n'y a pas de soucis d'accent :
    ok, alors je pense que le souci devait venir de là

    Citation Envoyé par Bisûnûrs Voir le message
    Et si tu as l'occasion de démontrer qu'il manque quelque chose à ce niveau là dans le tutoriel avec un exemple que tu avais à l'époque et qui ne fonctionne toujours pas en ayant apporté les modifications nécessaires, tu peux toujours nous en faire part pour qu'on corrige le tutoriel.
    non non, je me renseignait juste

    et merci

  11. #11
    Nouveau membre du Club

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2002
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Somme (Picardie)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2002
    Messages : 10
    Points : 33
    Points
    33
    Par défaut Remarquable de clarté
    Merci beaucoup pour ce tuto qui éclaire un sujet quasiment pas traité à ma connaissance.

    Un petit plus pour les utilisateurs de Notepad++ : pensez à choisir le bon encodage pour les nouveau documents "Paramétrage | Préférences | nouveau document" et cocher UTF-8 sans BOM. Ca évite de devoir rechercher quel script a échappé à cet encodage surtout lorsqu'il y a de nombreuses inclusions.

    Néanmoins, cette manipulation n'est pas toujours de bon aloi notamment si vous faites usage de la librairie fpdf qui ne supporte pas l'UTF-8 jusque dans sa version 1.6 . Il vous faudra alors décoder chaque chaîne vers de l'ISO grâce à utf8_decode.

    Merci également pour les précieux conseils et tuyaux.

  12. #12
    Nouveau membre du Club
    Inscrit en
    Mars 2007
    Messages
    58
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 58
    Points : 31
    Points
    31
    Par défaut
    Attention que php travaille en ISO ce qui signifie que les fonctions de manipulation de caractères classiques (ucfirst, strlen, strtolower...) ne fonctionnent pas si on manipule des chaines encodées en utf8...
    Il est intéressant à ce moment là de repasser la chaine de utf-8 vers ISO et inversément ensuite en utilisant utf8_encode() et utf8_decode()...
    Ou il faut installer et configurer le module mbstring ...
    Dommage que le tutoriel n'en parle pas car j'ai lu ça ailleurs mais j'aurais aimé plus d'infos quant à ce module... ou ce qu'il est mieux de faire...
    Vivement php 6 qui lui travaillera en UTF-8

  13. #13
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    iconv_set_encoding('internal_encoding','utf-8');
    iconv_set_encoding("output_encoding", "iso-8859-1");
    ob_start('ob_iconv_handler');
    Ce bout de code convertit de l'UTF-8 dans le buffer de sortie de PHP vers de l'ISO.

    J'aime bien aussi utiliser le buffer de sortie de PHP pour appliquer ce genre de traitements, il est tout à fait fait pour ça ^^

  14. #14
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par Alixe80 Voir le message
    Il est intéressant à ce moment là de repasser la chaine de utf-8 vers ISO et inversément ensuite en utilisant utf8_encode() et utf8_decode()...
    Le principe d'utf-8 n'est-il pas justement qu'il contient tous les caractères du monde alors qu'ISO n'en contient que 250, et qu'on ne peut donc pas convertir l'utf-8 vers l'ISO ?

  15. #15
    Membre à l'essai
    Homme Profil pro
    Responsable des études
    Inscrit en
    Octobre 2005
    Messages
    11
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Responsable des études

    Informations forums :
    Inscription : Octobre 2005
    Messages : 11
    Points : 12
    Points
    12
    Par défaut Ajouts d'infos
    Bonjour et merci pour ce tutoriel ! (et bonne année aussi)

    Dans l'éditeur PHPEdit (v3.4.4) :
    - option des nouveaux fichiers : Outils > Editer préférences ou F10, Menu Fichiers et copies de sauvegarde, options des fichiers, section type d'encodage
    - enregistrement d'un fichier ouvert en UTF8 : Fichier > Encodage de fichier > UTF-8

    Sinon ne pas oublier dans les formulaires accept-charset="utf-8" exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      <form name="logon" action="index.php" method="post" title="Identification" accept-charset="utf-8">
    Pour moi tout a très bien fonctionné, ça m'a évité d'utiliser htmlentities (car en plus j'empêche d'insérer des caractères spéciaux du type < et >) et j'ai aussi pu mettre des accents dans les commentaires et les voir affichés dans le HTML généré par doxygen.

  16. #16
    Modérateur

    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    12 567
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 12 567
    Points : 21 633
    Points
    21 633
    Par défaut
    Citation Envoyé par stundman Voir le message
    Sinon ne pas oublier dans les formulaires accept-charset="utf-8"
    ?

    C'est vraiment utile dans des cas précis, ou c'est pour la beauté du geste et la complétude par principe de l'information ?

  17. #17
    Membre actif
    Inscrit en
    Mars 2004
    Messages
    290
    Détails du profil
    Informations forums :
    Inscription : Mars 2004
    Messages : 290
    Points : 217
    Points
    217
    Par défaut
    Bonsoir,

    je n'avais jamais vu de propriété accept-charset. Pour m'être renseigné, cela ne fonctionne pas avec IE. Donc, c'est une notion à ne pas prendre en compte quand on souhaite être cross-browser.

  18. #18
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 906
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 906
    Points : 14 827
    Points
    14 827
    Par défaut
    Citation Envoyé par stundman Voir le message
    Sinon ne pas oublier dans les formulaires accept-charset="utf-8"
    Si on en croit cette page :
    http://giminik.developpez.com/xhtml/form.html
    cet attribut n'agit pas sur l'encodage lors du transfert de données vers le serveur, mais décrit seulement ceux qui sont lus par le serveur (preuve en est, on peut en mettre plusieurs). Donc effectivement il n'est pas très utile, sauf à des fins descriptives.

    Mais sinon merci pour les autres remarques, je vais essayer de les prendre en compte rapidement.

  19. #19
    Membre actif
    Avatar de Wormus
    Inscrit en
    Septembre 2005
    Messages
    262
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 262
    Points : 276
    Points
    276
    Par défaut


    Merci beaucoup pour ce tuto ! après une journée entière à galérer avec l'encodage sur mon site, j'en pouvais plus.
    Maintenant je mettrais tout en UTF-8 !!

  20. #20
    Membre régulier
    Inscrit en
    Mai 2007
    Messages
    183
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 183
    Points : 121
    Points
    121
    Par défaut
    Citation Envoyé par Alixe80 Voir le message
    Attention que php travaille en ISO ce qui signifie que les fonctions de manipulation de caractères classiques (ucfirst, strlen, strtolower...) ne fonctionnent pas si on manipule des chaines encodées en utf8...
    Et donc en pratique, il faut ouvrir tous les fichiers PHP et rechercher toutes les fonctions de traitement de chaine et les fonctions PCRE (par exemple preg_match) (avec notepad++ par exemple) susceptible de traiter des caractères accentués, et effectuer les adaptations comme précisé par Alixe80 (jouer avec utf8_decode() avant traitement et utf8_encode() après, ou trouver et utiliser la fonction mb_ équivalente).

    En pratique encore, je conseille de tagger chaque modif dans un commentaire (pour les retrouver facilement avec notepad++) en prévision de PHP6.. puisqu'il travaillera nativement en utf-8 : il faudrat alors supprimer tout les utf8_encode() et utf8_decode().. un futur tracas de moins . Pour les fonctions mb_string, je suppose qu'elles seront supportées par PHP6..

Discussions similaires

  1. Encoder son site en UTF-8 sans manquer une étape
    Par Bisûnûrs dans le forum Balisage (X)HTML et validation W3C
    Réponses: 26
    Dernier message: 28/10/2012, 19h09
  2. Pouvoir modifier son site sans toucher au code via une interface
    Par openeyes dans le forum Général Conception Web
    Réponses: 5
    Dernier message: 04/11/2010, 13h09
  3. Lire XML encodé UTF-8 sans noeud
    Par Bobdelariege dans le forum VB.NET
    Réponses: 1
    Dernier message: 23/06/2010, 12h13
  4. Encoder son site en UTF-8 sans manquer une étape
    Par Bisûnûrs dans le forum Général Conception Web
    Réponses: 0
    Dernier message: 12/09/2009, 11h44

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