PHP et UTF-8

Pour mon projet top – secret – que – si – vous – attendez – quelques – semaines – je – vous – dirais – tout, j’ai besoin d’implémenter un système de traduction. Après avoir lu quelques articles sur les jeux de caractères, j’en suis arrivé à la conclusion que l’idéal est d’utiliser UTF-8. J’ai donc cherché à voir ce que PHP propose dans ce domaine et je dois avouer que je suis perplexe.

Si j’ai bien compris, de manière interne PHP gère les chaines de caractères en ISO-8859-1 et il existe 2 fonctions (utf8_encode et utf8_decode) afin de convertir ces chaines vers et depuis UTF-8. La gestion interne des chaines en Unicode a bien été proposée mais cela reste pour le moment à l’étude.

Il y a quelques chose qui me semble vraiment étrange. Si quelqu’un soumet un formulaire contenant des caractères exotiques et que je dois traiter ce texte en PHP, que vont devenir ces caractères exotiques qui n’existent pas en ISO-88-59-1 ?

Suis-je passé à côté de quelque chose ou la gestion correcte des jeux de caractères avec PHP reste-t-elle un doux rêve ?

Ce contenu a été publié dans PHP. Vous pouvez le mettre en favoris avec ce permalien.

10 réponses à PHP et UTF-8

  1. Olivier dit :

    Du moment que ta page web a un charset UTF-8 tu ne te pr?ocupes plus de rien. Ce qui entre sera en UTF-8 et c’est bon.

    Ton seul probl?me peut venir si tu as besoin de faire des transformations sur les cha?bes (substr, preg_match, etc.) il faut utiliser les fonctions mb_string.

  2. S. F. dit :

    En fait, tu peux tr?s bien faire de l’UTF-8 sans trop te poser de questions avec PHP. La seule chose ? garder en m?moire est qu’un caract?re ne correspond pas forc?ment ? un octet de la chaine, et donc des fonctions comme substr(), strlen() ou $chr{} peuvent poser probl?me. Cependant, il n’y a aucun ennui avec la concat?nation et autres, et si tu te d?brouilles pour couper tes chaines aux espaces, par exemple, tu n’auras pas de probl?me. C’est d’ailleur ce que fait Olivier Meunier, je pense. (Il va encore m’en vouloir si je me trompe, mais soit)

    Sinon, il existe deux extensions int?ressantes pour celui qui veut manipuler des jeux de caract?res divers : mb_string et iconv. La seconde permet de convertir une chaine de caract?res d’un jeu quelconque ? un autre, et la premi?re fournit des ?quivalents aux fonctions PHP classiques (strlen, substr, …), mais adapt?es au cas des jeux de caract?res multi-octets. Il est aussi possible de reprogrammer ces fonctions en PHP mais il va sans dire que les performances en p?tissent…

  3. JMF dit :

    Merci pour ces pr?cisions Olivier et S. F. 🙂

  4. S. F. dit :

    De rien 🙂

  5. roby dit :

    Si jamais, regarde aussi la librairie iconv(), si elle est presente dans la configuration du serveur chez ton hebergeur:
    http://www.gnu.org/software/libi...

  6. Olivier dit :

    SF : couper aux espaces, c’est exactement ce que je fais 🙂

    En fait il n’y a qu’un seul cas dans tout dotclear ; les abstracts pour les trackbacks.

  7. Claroline et l’UTF-8

    Ben voil? au moment o? la question de l’utf-8 se pose, on en parle sur dyingculture …

  8. Mildred dit :

    En fait, j’utilise depuis d?ja quelques temps UTF-8 dans mon code php sans probl?me …
    Mais il faut faire attention aec des fonctions domme htmlentity() et pr?f?rer htmlspecialchars()

  9. beosfrance dit :

    Moi j’ai un gros soucis avec la fonction include(); en UTF-8, elle m’ajoute un saut de ligne au dessus du fichier inclus sous Iinternet Explorer (oui on en revient toujours au meme …. )

    Quelqu’un a une id?e pour m’aider ?

  10. JMF dit :

    beosfrance> Honn?tement, je ne pense pas que cela soit li?.

Les commentaires sont fermés.