Forum Programmation.php UTF-8

Posté par  .
Étiquettes : aucune
0
11
jan.
2005
Bonjour,

je me demandais s'il certains d'entre vous connaissent bien l'UTF-8 d'une part, et surtout comment autoriser/récupérer/encoder/traiter des chaînes de caractères UTF-8 via le web et PHP.

J'ai écrit un plugin UTF-8 pour wiclear (http://wiclear.free.fr(...)) qui permet de transformer la base de donnée d'un charset ISO-8859-1 vers un charset UTF-8. J'ai pour cela mis le nez dans le plugin de conversion UTF-8 de dotclear.
Une fois cette conversion effectuée, le charset de la page web est mis a jour vers UTF-8.
La question est : que faire maintenant ?
Est ce tout ?
Olivier Meunier m'a dit que normalement ça suffisait pour que le navigateur passe des chaînes en UTF-8. Très bien. Mais php ?
Un utilisateur de wiclear me signale qu'il faudrait rajouter un appel a setLocale. Je n'ai pas l'impression que ça résolve grand chose, sans compter qu'il faudrait potentiellement installer toutes les locales du monde sur le serveur web et que mon but n'est pas de formater les dates correctement par exemple, mais surtout que les chaînes de caractères soient correctement affichées dans les navigateurs.

Bref, je ne sais pas trop où commencer ... Ce qu'il me faudrait c'est un UTF-8 howto ...

Au secours

David
  • # Commentaire supprimé

    Posté par  . Évalué à 3.

    Ce commentaire a été supprimé par l’équipe de modération.

    • [^] # Re: header

      Posté par  . Évalué à 2.

      Oui, c'est ce que je viens de lire ici : http://intertwingly.net/stories/2004/04/14/i18n.html

      Et effectivement je ne le fais pas dans tous les cas.

      Sinon, je viens de comprendre que la i18n (charset) et la l10n(localisation) sont deux choses tres differentes qu'il faut traiter de deux manieres tres differentes.

      Je devrai arriver a m'en sortir.

      Merci
      • [^] # Commentaire supprimé

        Posté par  . Évalué à 2.

        Ce commentaire a été supprimé par l’équipe de modération.

        • [^] # Re: header

          Posté par  (site web personnel) . Évalué à 2.

          Vous le savez sans doute déja mais derriere ces labels obscures se cache quelque chose d'assez simple:

          $ echo "i`echo -n "nternationalizatio" | wc -c`n"
          i18n
          $ echo "l`echo -n "ocalisatio" | wc -c`n"
          l10n
          • [^] # Re: header

            Posté par  . Évalué à 1.

            Ben non, je ne savais pas ! :-)
            Rigolo !
          • [^] # cool ça :)

            Posté par  (site web personnel) . Évalué à 1.

            juste une petite correction pour faire le malin ...
            echo "i`echo -n "nternationalizatio" | wc -c | sed 's/ *//g'`n" 
            echo "l`echo -n "ocalisatio" | wc -c  | sed 's/ *//g'``n"
            
    • [^] # Re: header

      Posté par  . Évalué à 2.

      Et pour être un peu plus précis :

      Par défaut apache envoie les pages html codées en iso-8859-1 by-passant l'information du charset de celle-ci contenue dans la balise meta, par ex. :
      <meta http-equiv="Content-type" content="text/html; charset=utf-8" />

      Cela provient du paramètre :

      AddDefaultCharset ISO-8859-1

      situé dans le fichier /etc/apache2/conf/commonapache2.conf

      Il faut donc commenter cette ligne pour "forcer" les navigateur à utiliser le charset contenu dans la balise meta de la page et ne pas se fier à l'entête HTTP.

      En fait, la norme HTTP 1.1 dit que les navigateurs DOIVENT respecter le codage indiqué par l'entête HTTP. Donc Opera et Mozilla respectent bien la norme.

      Pour avoir le codage UTF-8 bien détecté par ces navigateurs sur un serveur sur lequel il n'est pas possible de modifier les fichier de config d'apache:

      Soit l'on peut écraser la configuration initiale du serveur sur un site donné en créant dans le répertoire principal un fichier .htacces contenant : AddDefaultCharset UTF-8

      Soit il faut indiquer explicitement l'encodage utilisé avec la fonction "header()" de PHP.

      Pour du XHTML avec encodage UTF-8, ça donne comme première ligne de chaque script PHP : header("Content-type : application/xhtml+xml ; charset=utf-8") ;

      Mais le Content-type "application/xhtml+xml" faisant planter Microsoft Internet Explorer (ah ah), on peut servir le XHTML avec : header("Content-type : text/html ; charset=utf-8") ; mais attention, "text/html" est officiellement déconseillé par le W3C dans le cas du XHTML.

      (sources diverses compilées à partir du net)

      Personnellement je trouve la solution du .htaccess bien pratique...

      en espèrant que ça aide
  • # si tu retrouves des liens...

    Posté par  (site web personnel) . Évalué à 2.

    je suis preneur aussi : je cherche un utf8-to-html (je ne suis même pas sûr que ça existe) pour par exemple transformer le é (utf-8) en &eacute;

    regarde au bas de cette page pour des exemples avec perl déjà (mais je dois être neu² ça ne m'a pas suffit)
    http://dev.eagle-usb.org/wakka.php?wiki=DevLinks(...)

    j'ai pourtant de vagues réminiscences de privilégier le 1:

    Deux possibilités entre : poste client <=> transformation <=> stockage
    1)
    saisie : locale => transformation locale vers utf-8 => utf-8
    affichage : locale <= transformation utf-8 vers locale => utf-8

    2) utf-8 <=> pas de transformation <=> utf-8

    contrainte : MySQL 4.1 de mémoire (sinon les recherches ne fonctionnent pas en UTF-8)

    Après reste à résoudre le souci du 1) si tu souhaites afficher des caractères en grec et en russe sur la même page, c'est pas gagné...

    iconv doit pouvoir aider mais à ce que j'ai lu c'est loin d'être normalisé :-( et je ne sais pas s'il est possible de l'utiliser en php

    éventuellement regarder du côté de phpBB2 pour voir comment ils ont procédé vu le nombre de langues qu'ils gèrent ! (le mix de langue ne passe sans doute pas)

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.