L’affichage en UTF8

Ceux qui ont été confrontés aux problèmes d’encodage de caractères peuvent confirmer que cela peut présenter un véritable casse-tête.

Ce fut le cas hier lorsque j’ai découvert qu’une nouvelle version d’un script imposait l’utilisation de l’utf8. Le résultat c’est que le symbole de l’euro s’affichait sous forme d’un diamant noir et les caractères accentués étaient également transposés sous forme d’autres caractères. Il fallait donc trouver une solution.

La base de données utilisait le latin1 et j’ai initialement pensé à exporter la BDD en SQL pour ensuite utiliser un texte pour changer toute occurrence de « CHARSET=latin1″ en « CHARSET=UTF8″. Cette solution n’a pas été concluante et, de toute façon, le script bigdump affichait quelques erreurs lors de l’importation.

Une deuxième approche a consisté à ré-encoder une page PHP en UTF8 avec Notepad++. J’ai découvert qu’il vaut mieux utiliser l’encodage sans bom car autrement cela semblait provoquer un message d’erreur concernant les sessions en haut de la page.

Pour finir, j’ai adopté la solution suivante. Au niveau de l’accès à la base de données j’ai tout simplement ajouté la ligne ci-dessous. Il s’agit de tout simplement de dire à PHP d’envoyer les requêtes en UTF8. Ça marche à merveille et les caractères s’affichent tels qu’ils apparaissent dans phpMyAdmin.

$link = mysql_connect($host, $user, $pass);
mysql_select_db($db_name);
 
//Requêtes en UTF8
mysql_query("SET NAMES utf8");

– James Poulson.