Problème de transcodage UTF-8 (caractère 195)

probleme de transcodage utf-8 caractere 195Problématique

Je suis amené à récupérer des données sur un de mes sites (codé en UTF-8) et à les basculer dans un autre après quelques traitements.

J’ai donc programmé un bout de code en PHP qui fonctionne sur mon serveur local, paramétrer également en UTF-8 et à mettre à jour par programme les tables WordPress de mon nouveau site par l’instruction mysqli_query.

Or que constaté-je de mes yeux horrifiés ? Que tous les caractères accentués et autres « ç » qui font le charme de notre belle langue apparaissent sous la forme que vous avez déjà tous observés (faites donc une recherche un peu poussée sur Amazon et vous verrez) : les fameux é et autres è … Inesthétiques au possible, illisibles et qui font franchement aussi négligé qu’une tâche de ketchup sur un plastron de smoking, tel que j’en porte tous les soirs pour le dîner depuis que j’ai vu et revu Downton Abbey.

J’essaie tous les utf8_encode, utf8_decode, iconv de PHP : rien n’y fait. Essayez de forcer le codage en UTF-8 d’un texte déjà en UTF-8, c’est spectaculaire !

Après une longue errance dans les forums, je constate que ce problème est très répandu et que ceux qui prétendent qu’il est facile à résoudre n’ont pas dû programmer depuis la chute de Bismarck.

Il faut admettre que dans la situation où je m’étais mis, je passais par un nombre de couches qui avaient toutes les raisons de ne pas tomber d’accord.

Solution

Le consensus ayant ses limites, j’ai donc décidé de passer un peu en force et de rappeler à tout ce petit monde (PHP, mySQL, WordPress) qui était le patron. Et pour ça, il existe une excellente instruction à passer à mySQL juste après la connexion (ou dans la chaîne de connexion). C’est (roulements de tambour …) :

SET NAMES UTF8

Et tout rentre dans l’ordre, je peux écrire « éçà€ » et j’obtiendrai bien « éçà€ ».

ET LE TOUR EST JOUÉ ! ALORS ON DIT MERCI QUI ?

Laisser un commentaire

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