Caractères UTF-8 et ISO 8859-1, tableau de conversion PHP

Conversion ISO-8859-1 en UTF-8
Conversion ISO-8859-1 en UTF-8

Certains problèmes d’encodage de caractères peuvent se produire lors d’import massif de bases de données (anciennes), où la conversion avec un nouveau schéma de caractères se passe mal.

Voici, par exemple, un extrait d’enregistrement d’une table obtenue par conversion d’un site SPIP vers wordPress.

On remarque la présence de caractères étranges tel que  qu’être, alors que cela aurait dû être interprété comme qu’être.

Le tableau php array() suivant montre les caractères dans ISO 8859-1 (ou Windows-1252) de 128 à 255 (hex 80 à FF). Le tableau permet de faire une conversion entre le caractère attendu UTF-8 et les caractères correspondants comme s’ils étaient des caractères ISO 8859-1. Vous pouvez utiliser ce tableau pour déboguer des problèmes où ces séquences de caractères latins se produisent, où un seul caractère était attendu. Le problème est provoqué par des octets UTF-8 interprétés comme des octets ISO 8859-1 (ou Windows-1252).

La moulinette de utf8_decode() peut fonctionner mais il y aura des problèmes car les deux interprétations de caractères sont présents dans la chaîne. De même avec iconv() ou  mb_convert_encoding(), même en spécifiant la constante  //IGNORE pour ignorer les caractères qui ne peuvent être représentés.

Voici ce que donne une conversion telle que  iconv( "UTF-8", "ISO-8859-1//IGNORE", $string );.

Une solution consiste à convertir les caractères à l’aide du tableau de conversion suivant.

On obtient 2 tableaux avec pour l’un toutes les clés, pour l’autre toutes les valeurs. On peut alors les utiliser avec str_replace(). Il est important de retrouver les 5 derniers éléments à la fin du tableau, ce sont aussi les caractères généraux :   'Ã', 'â', 'Â', 'Ã', 'â€'.

Et voici ce que cela donne avec la chaîne de caractères du début.

Il y a encore quelques petits problèmes, comme pour les caractères Á, Í, Ï, mais ne rencontrant vraiment pas souvent ces caractères en français, on peut dire que cela va.

Et hop, une conversion efficace et qui donne le résultat attendu.

Soumettre un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *