Quatre & Trois

Web, logiciels, langue française et divers.

mardi, 27 mars, 2007, 04:00

Encodage : ISO-8859-1, ISO-8859-15 ou windows-1252 (et UTF-8)

Quand on crée des documents (X)HTML, XML ou même d’autres… la question de l’encodage des caractères se pose souvent. Si UTF-8 est utilisable et qu’une légère augmentation du poids du fichier n’est pas un problème, je conseille grandement cet encodage qui, à la différence de ISO-8859-1, ISO-8859-15 ou windows-1252, peut afficher naturellement quelques milliers de caractères (256 pour les autres).

Mais pour diverses raisons, l’UTF-8 ne peut parfois pas être utilisé : une compatibilité tardive avec MySQL, pas de support natif avec PHP, des éditeurs de texte ou de pages web qui ne proposent pas ou ne supportent pas cette option. Et bien sur le fait que certains CMS n’ont pas été développés pour supporter l’UTF-8 (Nuked-Klan par exemple).

Une fois qu’on sait qu’on ne peut pas utiliser l'UTF-8, il reste plus ou moins trois formats d’encodage de caractères (dans le cadre d’un document rédigé dans un alphabet latin moderne comme le français, anglais, etc.). Ces trois encodages sont ISO-8859-1, ISO-8859-15 et windows-1252.

ISO-8859-1 est largement plus utilisé que les deux autres mais pourquoi et qu’ont comme avantage(s) les autres ?

La seule différence entre l’ISO-8859-1, ISO-8859-15 c'est que l’ISO-8859-1 connait ¤ ¦ ¨ ´ ¸ ¼ ½ ¾ et que ISO-8859-15 connait € Š š Ž ž Œ œ Ÿ mais ces huit caractères sont présent soit dans ISO-8859-1 ou ISO-8859-15 mais pas les deux à la fois. À vous de voir si vous utilisez plus souvent les caractères que ISO-8859-1 connait ou ceux de l’ISO-8859-15.

Si vous choisissez ISO-8859-15 (ce que je trouverais logique car les caractères ISO-8859-1 que ISO-8859-15 ne connait pas sont peu utilisés), n’utilisez surtout pas le Bloc-notes de Windows ou tout autre éditeur de texte qui ne gère pas ce format pour écrire des documents !

Et maintenant windows-1252, dont on ne parle pas assez. C’est pourtant l’encodage par défaut de Windows dans de nombreux pays.

Pour faire simple windows-1252 c'est ISO-8859-1 avec plus de caractères ! Vous me direz… mais je croyais qu’ils étaient tout trois limités à 256 caractères ? Oui en effet, mais ISO-8859-1 comme ISO-8859-15 n’utilisent pas toute la place pour des caractères, ils en réservent pour ce qui est appelé des caractères de contrôle. Ces caractères de contrôle n’ayant pas d’intérêt dans des documents, sont remplacés par € ‚ ƒ „ … † ‡ ˆ ‰ Š ‹ Œ Ž ‘ ’ “ ” • – — ˜ ™ š › œ ž Ÿ avec windows-1252.

Donc pour conclure, windows-1252 est mon choix personnel car il contient plus de caractères imprimables que les deux autres. Il faut aussi dire qu’il est supporté sur les navigateurs pour Linux, Mac

Tout commentaire est bienvenu.

11 commentaires

1. Le mardi, 5 août, 2008, 14:19 par rx7monster

Bonjour,

est-ce-que, par hasard, saurais-tu convertir Nuked-Klan en UTF-8 ?

2. Le mardi, 5 août, 2008, 23:24 par Sined

Bonjour,
J'ai déjà réussi à rendre Nuked-Klan compatible UTF-8 mais malheureusement cela fait quelques années et je ne sais plus exactement comment j'ai fait.
Je pense que le mieux serait de demander sur le forum de Nuked-Klan pour avoir de l'aide si ce n'est pas déjà fait.
Je peux juste te dire que en utilisant les fonctions PHP mbstring si elle sont disponibles chez ton hébergeur tu peux convertir Nuked-Klan en UTF-8 assez facilement.
Il faut aussi que tu regarde du côté de ta base de données SQL pour la convertir en UTF-8 si ce n'est pas déjà le cas.

Je suis actuellement en vacance et je ne peux pas accéder à mon FTP donc je ne peux pas voir s'l reste des traces de ce que j'avais fait pour rendre Nuked-Klan compatible UTF.

Je reviens dans un mois donc dans un mois je pourrai t'en dire plus.

3. Le jeudi, 7 août, 2008, 18:08 par rx7monster

Bonjour,

Les membres du forum de Nuked-Klan n'ont pas l'air motivé par l'idée de l'UTF-8 :( .

A part ça, si je comprends bien, il faut réécrire la base MySQL et les fichiers du CMS Nuked-Klan en lui-même, en UTF-8 ?

Sinon, j'attends patiemment ton retour.

4. Le jeudi, 7 août, 2008, 19:24 par Sined

Non il ne faut rien réécrire, la base de données SQL tu peux la convertir en UTF-8 en ligne avec PHPMyAdmin. Cela se fait tout seul. Pour les fichiers du CMS Nuked-Klan en principe tu as juste à rajouter/changer quelques lignes de code mais pas besoin de tout réécrire.

5. Le jeudi, 7 août, 2008, 21:03 par rx7monster

Ah d'accord,

peux-tu me dire quelles sont les lignes à changer ?

Sinon, j'attends patiemment ton retour.

6. Le mardi, 19 août, 2008, 16:28 par Fanlou

Oui moi aussi je t'attends avec impatience..

7. Le jeudi, 28 août, 2008, 08:21 par Trevil

Dejà Fais par les Polonais sur le site http://www.nuked-klan.pl ,
la ta a la DEMO de cette version NK http://sp44-utf8.nuked-klan.pl/

Le Téléchargement est la http://www.nuked-klan.pl/download-n...

8. Le mercredi, 3 septembre, 2008, 17:58 par Sined

Je viens juste de voir le commentaire précédent après avoir rédigé ce commentaire.

Je pense que télécharger la version non-officielle sur le site au dessus est moins risquée que ma technique.

Je suis de retour ! Avec des lignes de code, je ne sais pas si cela fonctionne partout mais en tout cas cela fonctionnait sur mon site.

Étape 1  : Faire une sauvegarde de la base de données ET des fichiers Nuked-Klan

Étape 2 : Dans le fichier nuked.php à la racine de Nuked-Klan, vers la fin du fichier, avant «  ?> », rajouter  :

function purge_iso88591($str)
{

$char = array ("\x80", "\x82", "\x83", "\x84", "\x85", "\x86",
"\x87", "\x88", "\x89", "\x8a", "\x8b", "\x8c",
"\x8e", "\x91", "\x92", "\x93", "\x94", "\x95",
"\x96", "\x97", "\x98", "\x99", "\x9a", "\x9b",
"\x9c", "\x9e", "\x9f");

$html = array ('€', '‚', 'ƒ', '„', '…', '†',
'‡', 'ˆ', '‰', 'Š', '‹', 'Œ',
'Ž', '‘', '’', '“', '”', '•',
'–', '—', '˜', '™', 'š', '›',
'œ', 'ž', 'Ÿ');

$str = str_replace($char, $html, $str);
$str = preg_replace('/&#(x[a-f0-9]+|[0-9]+);/i', '&#$1;', $str);

return $str;

}

Étape 3  : Dans le fichier index.php à la racine de Nuked-Klan toujours, remplacer  :

if (defined("NK_GZIP") && @extension_loaded('zlib') && !@ini_get('zlib.output_compression') && @phpversion() >= "4.0.4")
{
ob_start("ob_gzhandler");
}

Par  :

if (defined("NK_GZIP") && @extension_loaded('zlib') && !@ini_get('zlib.output_compression') && @phpversion() >= "4.0.4")
{
ob_start("ob_gzhandler");
} ob_start('purge_iso88591');


Étape 4 (essayer que si cela ne fonctionne toujours pas après l'étape 3) : Convertir toutes les tables de la base de donnée MySQL en UTF-8 (utf8_general_ci). En passant par PHPMySQL c'est facile.

Voila, j’espère que cela fonctionnera aussi avec vous. Sinon je peux pas vous aider plus, pas assez de temps désolé.

Enfaite cette méthode ne convertit pas Nuked-Klan en UTF-8 techniquement parlant, mais permet d'afficher les caractères UTF-8 donc cela revient au même.

On peux voir un exemple en fonctionnement ici : http://4et3.free.fr/index.php?file=Guestbook

9. Le mercredi, 3 septembre, 2008, 20:26 par rx7monster

Bonjour !

J'ai testé la version donnée par Trevil. Je la trouve un peu bancale, des fichiers lang manquent.

Sinon, je vais tester la méthode de Sined ce week-end. Je n'ai pas trop le temps en ce moment à cause du travail.

Et merci à vous deux !

10. Le lundi, 15 septembre, 2008, 23:07 par Trevil

Elle être tester en langue Polonais , donc c possible que il manque 2 3 ligne ... Ajoute c tous.

11. Le lundi, 27 octobre, 2008, 10:28 par rx7monster

Bonjour,

j'ai fait les étapes 1, 2 et 3 de Sined, et tout fonctionne parfaitement :D

Merci beaucoup et à bientôt