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

    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

    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 !
    Pas de question technique par MP !
    Tout le monde peut participer à developpez.com, vous avez une idée, contactez-moi !
    Mes formations video2brain : La formation complète sur JavaScriptJavaScript et le DOM par la pratiquePHP 5 et MySQL : les fondamentaux
    Mon livre sur jQuery
    Module Firefox / Chrome d'intégration de JSFiddle et CodePen sur le forum

  3. #3
    Rédacteur

    Je ne réponds pas aux questions techniques par MP.

  4. #4
    Membre émérite
    Bravo et merci pour ce document! On aura enfin un lien vers lequel pointer lorsque la question sera posée.
    Les Cours et tutoriels JavaScript
    Penser à la recherche et au bouton

  5. #5
    Membre actif
    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
    Citation Envoyé par Macmillenium Voir le message
    +1...
    Pensez à utiliser les ressources disponibles en Dev. Web :
    (x)HTML : Cours (X)HTML / FAQ (X)HTML
    CSS : Cours CSS / FAQ CSS / Galerie CSS
    Javascript : Cours / FAQ / Sources
    Mon site : Développeur Web Freelance

  7. #7
    Membre éclairé
    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

    @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
    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é
    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
    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.
    May Delphi be with you !

  12. #12
    Nouveau membre du Club
    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
    Rédacteur

    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

    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 ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre à l'essai
    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

    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 ?
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Membre actif
    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

    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


    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 !!
    Bankaï !!

  20. #20
    Membre régulier
    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..

###raw>template_hook.ano_emploi###