Bonjour,

J'utilise actuellement un encodage iso8859-1 mais je crois que je vais être dans l'obligation de passer à l'UTF-8 car en intégrant de l'AJAX (via la librairie Prototype) sur mon site, les valeurs retournées (chaînes de caractères) en javascript sont en UTF-8 (et je ne crois pas que j'ai la possibilité de changer cela).

Je voulais donc avoir vos recommandations pour un passage à l'UTF-8, vos conseils et les résultats de vos expériences (erreurs à ne pas faire, point sur lesquels être particulièrement vigilant, etc.).

De même, concernant mes fichiers "include" en php (qui contiennent une bonne partie du contenu de mon site), que dois-je en faire ? dois-je remplacer dans ces fichiers tous les caractères spéciaux (accents, etc...) par des trucs du genre \u0045 ? ou alors par leur code html du type é ?

Merci d'avance chers amis !

aurapp
Modifié par aurapp (24 Jul 2006 - 15:21)
aurapp a écrit :

De même, concernant mes fichiers "include" en php (qui contiennent une bonne partie du contenu de mon site), que dois-je en faire ? dois-je remplacer dans ces fichiers tous les caractères spéciaux (accents, etc...) par des trucs du genre \u0045 ? ou alors par leur code html du type é ?


L'interêt d'UTF-8 est justement de ne pas faire ce genre de bidouilles Smiley sweatdrop

Tu encodes tout en UTF-8 (styles CSS, scripts JavaScript, fichiers PHP, fichiers HTML, fichiers brocolis, base de donnée (mysql version supérieure ou égale à 4.1 pour ce qui concerne mysql)

Via l'éditeur (UTF-8 sans BOM sinon ça merde avec PHP)
Via le serveur (header en PHP, ou AddCharset avec Apache)
Tant que j'y suis, une petite question que je me pose :
Existe-t-il des outils permettant de transcoder par lot des fichiers depuis un encodage X vers un encodage Y ? Ou a défaut d'un choix large d'encodage, depuis les encodages 8-bit occidentaux courants (latin1, latin9, windows-1552, MacRoman) vers UTF8 ?

Si vous connaissez un outil sous *nix (en graphique ou ligne de commande, peu importe), ça m'intéresse.

Je n'en ai pas l'utilité tout de suite, mais je veux bien avoir ça de dispo dans ma trousse à outils. Smiley smile
Olivier a écrit :

Tu encodes tout en UTF-8 (styles CSS, scripts JavaScript, fichiers PHP, fichiers HTML, fichiers brocolis, base de donnée (mysql version supérieure ou égale à 4.1 pour ce qui concerne mysql)


Est-ce tu pourrais me préciser cela un peu ?
A savoir, comment concrètement dois-je faire pour encoder un fichier CSS, Javascript ou PHP ?
Parce que actuellement, j'ai ajouté à mes fichiers include l'entête :
header("Content-Type: text/html; charset=utf-8");

Mais dans ces fichiers include, j'ai écris mes textes "normalement", c'est-à-dire avec les accents, etc...
Et après, quand je charge ma page, ces accents apparaissent sous la forme de symboles bizarres avec un point d'interrogation dedans...

Par contre, j'ai converti ma base MySQL en UTF-8 (du coup les accents présents dans mes champs varchar par exemple sont devenus des suites de caractères bizzaroïdes, mais bon... ça fonctionne...).

Olivier a écrit :

Via l'éditeur (UTF-8 sans BOM sinon ça merde avec PHP)
Via le serveur (header en PHP, ou AddCharset avec Apache)


Juste par curiosité, ça veut dire quoi "sans BOM" ?


Merci d'avance pour ton aide Smiley smile
Pour le header, c'est une des solutions, tu peux la conserver, ça fonctionne bien.

Mais il faut que ton fichier soit encodé en UTF-8 !

Pour cela, il te faut un éditeur le permettant (j'utilise notepad++ qui fait ça très bien).

Tu as généralement un menu encodage, il te suffit alors de sélectionner UTF-8 en prenant de soin de ne pas utiliser UTF-8 BOM, (donc UTF-8 sans BOM).

La BOM, c'est quelques caractères en début de fichier pour dire que c'est de l'UTF-8 (c'est un truc un peu bidouille en fait), mais ça fait tout foirer lorsque tu utilises PHP.
Tu as plusieurs topic sur le sujet dans le salon.

Donc, pour résumer, il te faut un éditeur te permettant à la fois l'encodage UTF-8 des fichiers et aussi qui te laisse le choix d'ajouter ou non la BOM.

Ensuite, le header PHP pour déclarer l'encodage côté serveur.

Pour les fichiers CSS et HTML ("pur"), si tu veux éviter d'y ajouter du PHP, tu peux faire ça via Apache et le fichier .htaccess grâce à AddCharset :

AddCharset utf-8 .html
AddCharset utf-8 .css


En veillant encore une fois à ce que tes fichiers soient bien encodés en UTF-8.


Pour MySQL, je n'ai pas encore utilisé UTF-8 sous MySQL ni fait de transfert d'encodage d'une BD à l'autre, je ne sais pas trop ce qui peut se passer donc Smiley ohwell
Je sais juste que ce n'est possible qu'à partir de MySQL 4.1

Tu vas peut être devoir te farcir tous tes accents à la main (avec un petite moulinette php eventuellement)...

Recherche sur le net des infos sur le sujet (via google), ou sur le forum peut être, mais je n'ai pas le souvenir que ça ait déjà été traité (mais je peux me planter, alors vérifie Smiley cligne )
++
mpop a écrit :
Existe-t-il des outils permettant de transcoder par lot des fichiers depuis un encodage X vers un encodage Y ?


Perso, j'ai utilisé la commande *nix suivante :


iconv -f ISO8859-1 -t UTF-8 fichier_iso8859.txt > fichier_utf8.txt
Olivier a écrit :

Pour cela, il te faut un éditeur le permettant (j'utilise notepad++ qui fait ça très bien).


J'utilise Textpad (www.textpad.com) qui fait ça très bien, avec en option l'UTF-8 BOM.

Olivier a écrit :

Pour MySQL, je n'ai pas encore utilisé UTF-8 sous MySQL ni fait de transfert d'encodage d'une BD à l'autre [...]
Tu vas peut être devoir te farcir tous tes accents à la main (avec un petite moulinette php eventuellement)...


J'ai ma conversion de MySQL en UTF-8 :
1) Tu fais un dump complet de ta base
2) Tu crées une nouvelle base encodée en UTF-8 (via phpMyAdmin, c'est facile)
3) Tu modifies dans ton fichier dump les lignes "CHARSET=xxx" par "DEFAULT CHARACTER SET UTF-8 COLLATE UTF-8" (normalement ça se trouve à la fin des Create Table...)
4) Tu utilises la commande *nix : iconv
5) Tu recharges ton dump dans la nouvelle base

Et voilà, c'est fait !
Et normalement, ça fonctionne, j'ai pas mal testé ça...

Merci encore pour cette aide qui m'aura été précieuse !
Bonne continuation Smiley smile
aurapp a écrit :
Perso, j'ai utilisé la commande *nix suivante :

iconv -f ISO8859-1 -t UTF-8 fichier_iso8859.txt > fichier_utf8.txt

Merci pour l'info. Smiley cligne
Olivier, j'ai une question
Que se passe t-il si php travaille sur des chaines utf8 ?? Il faut alors utilise les fonctions de conversion utf8 non ? car PHP ne sait pas travailler nativement sur de l'utf8
nORKy a écrit :
Il faut alors utilise les fonctions de conversion utf8 non ?

Non, l'extension mbstring est faite pour ces manipulations.
Florent V. a écrit :
Tant que j'y suis, une petite question que je me pose :
Existe-t-il des outils permettant de transcoder par lot des fichiers depuis un encodage X vers un encodage Y ? Ou a défaut d'un choix large d'encodage, depuis les encodages 8-bit occidentaux courants (latin1, latin9, windows-1552, MacRoman) vers UTF8 ?

Si vous connaissez un outil sous *nix (en graphique ou ligne de commande, peu importe), ça m'intéresse.

Je n'en ai pas l'utilité tout de suite, mais je veux bien avoir ça de dispo dans ma trousse à outils. Smiley smile



Je suis presque sûr que Emacs le fait.
Sinon, j'ai vu cette question il y a peu sur un forum.
On a parlé de convert à ce moment-là.
Bonjour,

lretourdupaps a écrit :
Le tableau seul fonctionne mais des caractéres speciaux ne passent pas dans ma page index. Je pense que le probléme est dus a un probléme de normes différentes.

Un petit tour par la FAQ du forum, pour commencer? La réponse s'y trouve.

Par ailleurs, merci d'éviter de reprendre d'anciens sujets pour y parler d'autre chose (présenter un nouveau problème, par exemple).