Lutter contre les problèmes d'encodage en PHP


Touche de clavier
Voici un exemple de code php, à utiliser si l'on veut éviter les problèmes d'encodage en PHP (en une seule ligne).

$chaine = htmlentities($chaine, ENT_QUOTES, mb_detect_encoding($chaine)); 

Cette ligne fait les actions suivantes :

  • détection de l'encodage de la chaine : mb_detect_encoding($chaine)
  • puis convertion de tous les caractères spéciaux par leur code html

Cela peut-être pratique dans le cas d'insertion de données dans une base, on évitera ainsi les problèmes d'encodage, les problèmes d'insertion de quotes ...

De plus, on pourra réafficher sans aucun traitement les données dans une page web, car les navigateurs actuels effectuent eux-mêmes la conversion des caractères spéciaux.


16 Commentaires pour "Lutter contre les problèmes d'encodage en PHP"

Flux des commentaires de cet article Ajouter un commentaire
  •  

    Le mieux : homogénéitée DB / fichier + apache bien configuré.

    J'ai pu passer tout les sous domaine de feodra-fr en utf-8 (adaptation pour le forum punBB) sauf mailman qui dans sa localisation francophone ne veux que du latin 1, que j'ai configuré via un virtualhost.

    RépondreRépondre
    LLaumgui , le 23 avril 2007 à 21:33
  •  

    J'utilise cette méthode dans le cadre du développement de la version 3.0 du moteur de planet-libre.org.

    Il y a de nombreux cas de flux xml qui indiquent qu'ils sont en UTF-8 et dont le contenu est en ISO ...

    Cette méthode se révèle alors la plus perfomante !

    RépondreRépondre
    pti-seb , le 23 avril 2007 à 22:31
  •  

    Je sais que c'est difficile de se rappeler des numéros, mais merci d'appeler les charsets ISO 8859 par leur nom et pas juste "ISO". (Plus précisément, il s'agit normalement soit de l'ISO 8859-1, soit de l'ISO 8859-15 pour les textes en français.)

    Non seulement, l'UTF-8 est aussi un charset ISO (décrit dans le standard ISO 10646), mais en plus pas mal de textes "en ISO" ne sont pas du tout en un charset ISO, mais en le CP 1252 de M$ qui contient les caractères de l'ISO 8859-1 plus certains autres (comme le symbole euro, symbole qui n'existe pas du tout en l'ISO 8859-1!

    L'ISO 8859-15 contient ce symbole, mais comme il n'est pas entièrement compatible avec l'ISO 8859-1 (il a remplacé certains caractères) et comme ce n'est pas le choix fait par M$, son adoption reste limitée - je pense que les utilisateurs susceptibles d'utiliser l'ISO 8859-15 sont pour la plupart passés directement à l'UTF-8, les autres suivent les choix de M$ et donc le CP 1252).

    RépondreRépondre
    Kevin Kofler , le 26 avril 2007 à 22:03
  •  

    Pti Seb
    Merci pour ce billet mais comme je suis un boulet pourrais-tu, stp, être + précis sur le nom du fichier et son emplacement dans un blog ?

    RépondreRépondre
    daria , le 11 juin 2007 à 22:23
  •  

    @daria : il s'agit ici d'une fonction, donc tu peux la mettre dans n'importe quelle page php d'un site. Il faut juste bien l'intégrer au code.

    RépondreRépondre
    pti-seb , le 11 juin 2007 à 23:29
  •  

    Nickel !!
    Après avoir galéré pour régler mes problèmes d'accents et signe euro, voilà une solution qui fonctionne à la perfection ! :P

    un grand merci !

    RépondreRépondre
    olance , le 1 juillet 2007 à 19:34
  •  

    Vous avez de la chance, moi je me prend un méchant :
    Warning:htmlentities() charset `ASCII' not supported, assuming iso-8859-1 in [path file]

    Mon serveur est une Debian Etch / MySQL5, PHP5, mbstring ok ..

    RépondreRépondre
    sid , le 30 septembre 2007 à 20:18
  •  

    Le pb avec cette fonction c'est que mon texte contient des balises HTML :-( qui se retrouvent affichées.

    RépondreRépondre
    lm , le 27 février 2008 à 22:50
  •  

    @lm : tu peux peut-être utiliser une fonction inverse de décodage dans ce cas. Exemple :
    echo html_entity_decode($chaine, ENT_QUOTES, 'UTF-8')

    RépondreRépondre
    pti-seb , le 29 février 2008 à 19:19
  •  

    Mille merci pour cette fonction, jla connaissais pas avant.
    En tout cas elle est venu au bon moment =)

    RépondreRépondre
    Astalavista , le 17 juillet 2008 à 15:15
  •  

    merci merci merci mille merci !!

    j'étais dans une situation tellement farfelue... ce code vient de tout corriger, sans effort.

    RépondreRépondre
    gribouille , le 7 décembre 2009 à 15:36
  •  

    bonjour

    je suis entrain de dévélopper un site web en arabe: je rencontre un problem d'encodage en utilisant la fonction htmlentities pour afficher un text arabe depuis la base de donnée mysql :

    la table de la base de donnée :

    create table aud(

    iId int unsigned NOT NULL auto_increment,
    title varchar(255) NOT NULL ,
    PRIMARY KEY (audId)
    )ENGINE=MYISAM DEFAULT CHARACTER SET utf8 COLLATE utf8_unicode_ci;

    le code php

    résultat : ???????

    RépondreRépondre
    lrool , le 24 mai 2010 à 11:13
  •  

    Yo people, long time reader first time poster here

    psyched to be a member, and I'm keen to start getting more active here

    Until then visit my page http://fridaynitebytes.com/unpeople/?p=11&preview=true

    RépondreRépondre
    Idogthyhogs , le 13 octobre 2010 à 13:33
  •  

    NiksBela 7 I consider, that you are mistaken. Write to me in PM.

    _____________
    vigra
    genericorder online
    3

    RépondreRépondre
    morycose , le 18 octobre 2010 à 18:41
  •  

    Bonjour (et en mode je post avec quelques mois de "retard") : iconv de php ou en commande système peut aussi résoudre une masse de problèmes d'encodage (j'ai eu le problème il y a quelques jours).

    RépondreRépondre
    Simon , le 21 mai 2011 à 22:59
  •  

    Bonjour et merci à simon pour avoir donner la piste du iconv.

    Pour faire un rapide topo, via je devais uploader (par API)une page html déposé par une personne. Le hic c'est qu'une personne pouvait très bien me déposer une page en UTF-8 en ISO-8859-1. Les pages en elles même pouvait comporter des caractères différent de l'encodage annoncé (merci également aux caractères cadratin, ).

    iconv(mb_detect_encoding($string), 'UTF-8', $string);

    En espérant que cela puisse servir à d'autre.

    RépondreRépondre
    Mamuth , le 20 juillet 2011 à 16:58
 

Ajouter un commentaire

actualité android apache apple astuce astuces bash bilboblog blog boot chrome clavier commande commandes conky date debian Desktop développement elementary exploit faille fedora firefox flash gimp gnome google graphique Graphisme hack hacking Hardware humour intel internet iphone jailbreak Jeux Kde kernel libre Linux log logiciels Logiciels Libres lucid lynx maemo mail maquette metasploit microsoft mobile mockup monitoring mozilla multi-touch musique mysql n900 nautilus nokia noyau openoffice open source password photos php Planet publicité red hat redhat rpm réseau screenshot script serveur serveurs shell sql ssh statistiques sysadmin system Sécurité thème tux-planet tv twitter ubuntu unity vidéo vidéos vlc voyage wallpaper windows wordpress yum