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 Anonyme . Évalué à 3.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: header
Posté par Epsos . Évalué à 2.
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 Anonyme . Évalué à 2.
Ce commentaire a été supprimé par l’équipe de modération.
[^] # Re: header
Posté par Frédéric Desmoulins (site web personnel) . Évalué à 2.
$ echo "i`echo -n "nternationalizatio" | wc -c`n"
i18n
$ echo "l`echo -n "ocalisatio" | wc -c`n"
l10n
[^] # Re: header
Posté par Epsos . Évalué à 1.
Rigolo !
[^] # cool ça :)
Posté par FReEDoM (site web personnel) . Évalué à 1.
[^] # Re: header
Posté par z3l . Évalué à 2.
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 BAud (site web personnel) . Évalué à 2.
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.