Le casse-tête des encodages avec les caractères spéciaux «ÉàûÔçûÈ» !

encodages caracteres speciaux

Table des matières

Avec les encodages, certains cas de figure peuvent s’avérer être de véritables casse-tête !
Voici donc une expérience vécue, et tant qu’à avoir passé autant d’heures à trouver une solution, je me suis dit que j’allais la partager avec vous.

langue du site

En général, avoir un site en langue française ne pose aucun problème, mais voici un cas de figure que vous pourriez rencontrer et cet article vous fera sauver bien de temps et des cheveux, s’il vous en reste sur le coco !

La situation

Afin de pouvoir travailler sur le site d’un client hors-ligne, j’avais décidé de créer une installation sur mon serveur. Or, surprise, une fois le tout installé, tous les caractères spéciaux, à savoir les lettres avec des accents, se retrouvèrent complètement transformés !

exemple 2

 

La problématique

Les «é» devenaient des «Ã©», les «ç» des «Ã§» etc. Bref, vous voyez le tableau !

De toute évidence, il y avait une différence d’encodage entre les 2 serveurs… En regardant de plus près les 2 bases de données sur phpMyAdmin, j’ai pu constater que les 2 s’affichaient exactement de la même manière, à la différence que le site original convertissait ces accents convenablement, alors que l’autre affichait ces caractères bizarroïdes sans les traduire. Autre indice étonnant, en regardant le code source des 2 sites en ligne, le meta tag <meta charsetUTF-8«> était le même sur les 2 sites !

J’aurai pu me dire également que j’allais 1 à 1, remplacer ces caractères avec la fonction «Chercher et remplacer» de mon éditeur de texte, mais ça ne réglait pas mon problème, car l’idée était de transférer ma base de données SQL, une fois modifiée, sur le site original. Or, je me suis rapidement aperçu que ça donnerait ça !

Comprendre et tester

Alors, n’étant pas habitué aux questions d’encodage, même si je sais en gros de quoi il en retourne, j’ai commencé à chercher sur le web des explications et des solutions. Et des articles qui traitent de l’encodage, il y en a des tonnes et des tonnes. Des heures de plaisir !

Voici donc ce que j’ai essayé:

  • Exporter le fichier original en 8859-1 (qui comprend les caractères latins, et qui est aujourd’hui un standard abandonné au profit de l’Unicode utf-8) et le réimporter en utf-8
  • Exporter le fichier original en 8859-1 et le réimporter en 8859-1
  • Exporter le fichier original en utf-8 et le réimporter en 8859-1
  • Importer le fichier original en ayant au préalable changé l’encodage dans un éditeur de texte, du genre Notepad ++ (PC) ou Sublime Text, TextWrangler etc.

 

… et ainsi de suite, mais rien ne donnait le résultat escompté !

La solution

Dans un sursaut d’ultime désespoir, après avoir passé un nombre d’heures indécent, l’oeil hagard et les mains tremblantes ;-), je suis retourné sur le web, à la recherche de l’incompréhensible. Et là, je suis tombé sur l’article d’un blogue suggérant une solution ultrarapide et on ne peut plus simple.

En effet, la solution la plus évidente est souvent celle que l’on ne voit pas !

Dans votre fichier config.php, il y a ces 2 lignes:

/** Database Charset to use in creating database tables. */
define ('DB_CHARSET', 'utf8mb4');
 /** The Database Collate type. Don't change this if in doubt. */
define ('DB_COLLATE', ' ');

et bien il suffit de les commenter (ou de les éliminer, ça revient au même), en ajoutant «//» devant chaque bout de code, comme ça:

 /** Database Charset to use in creating database tables. */
// define('DB_CHARSET', 'utf8mb4');
/** The Database Collate type. Don't change this if in doubt. */
// define('DB_COLLATE', ' ');

Et voilà ! ;-)

Mais, curieux comme toujours, j’ai poussé mes recherches dans cette direction, et j’ai trouvé également que si je changeais simplement:

define('DB_CHARSET', 'utf8mb4');

en

define('DB_CHARSET', '8859');

Le résultat était le même !

Conclusion

Ce qui est fantastique avec  le web, c’est qu’il y a toujours quelqu’un (99,9%) qui aura eu une problématique similaire. Alors si j’ai écrit cet article, c’est pour qu’il y ait une source de plus, francophone, qui réponde à cette problématique.

Et qui sait, peut-être qu’un jour, parce que vous l’aurez lu, vous réglerez un problème similaire en 2 minutes, sans vous arracher les cheveux ;-)

Merci !

Nous avons bien reçu votre message,
et nous vous répondrons sous peu.