WordPress et exports de base de données : é et ’ au lieu de é et ’

Après une migration, une mise à jour ou un export de base, vos articles affichent soudain é au lieu de é et ’ au lieu de ’ ? Les données sont presque toujours encore là : elles sont simplement lues avec le mauvais encodage. Mojibuster répare l’export, puis vous corrigez la cause dans la base.

Fonctionne avec du texte et ces fichiers :

  • CSV
  • TXT
  • JSON
  • XML
  • SRT
  • VTT
  • SMI
  • TSV
  • MD
  • HTML
  • SQL
  • LOG

Par exemple des exports Excel, des sauvegardes de bases de données, des sous-titres ou du code de site web.

Réparer

  1. Déposez un fichier ou collez du texte
  2. La réparation est automatique
  3. Copiez ou téléchargez
ou glissez simplement un fichier ici

À quoi ressemble le problème

Une ligne d’un dump SQL après un changement de serveur

Avant

INSERT INTO wp_posts (post_title) VALUES ('Menu du café – crème brûlée');

Après

INSERT INTO wp_posts (post_title) VALUES ('Menu du café – crème brûlée');

D’où vient l’erreur

WordPress stocke le texte en UTF-8. Beaucoup d’anciennes installations ont toutefois créé leurs tables en latin1 ou se sont connectées en latin1. Tant que l’écriture et la lecture font la même erreur, personne ne s’en aperçoit. Après un déménagement vers un nouveau serveur, un export avec phpMyAdmin ou un changement du jeu de caractères de connexion, chaque lettre accentuée se transforme soudain en deux caractères.

  • DB_CHARSET dans wp-config.php vaut latin1 ou ne correspond pas aux tables.
  • Le dump a été exporté en latin1 et importé en utf8mb4, ou l’inverse.
  • Une extension ou un script d’import a converti une nouvelle fois un texte déjà abîmé. Cela donne du texte doublement encodé comme é.

Réparer l’export

  1. Faites une sauvegarde de la base avant de modifier quoi que ce soit.
  2. Exportez les tables concernées dans un fichier .sql, par exemple avec phpMyAdmin ou mysqldump --default-character-set=utf8mb4.
  3. Déposez le fichier dans la zone ci-dessus. Mojibuster ne répare que les endroits abîmés et vous montre chaque modification.
  4. Téléchargez le fichier réparé et importez-le en utf8mb4 dans une base de test vide.
  5. Vérifiez le site. Si tout est correct, importez-le dans la base de production.

Le dump n’est jamais envoyé sur un serveur, ce qui compte : il contient en général des comptes utilisateurs, des adresses e-mail et des commentaires. Plus de détails pour les entreprises et les DPO.

Attention aux données sérialisées

WordPress enregistre certains réglages dans wp_options et wp_postmeta sous forme de valeurs PHP sérialisées, par exemple s:5:"Café";. Le nombre est la longueur en octets. Quand é redevient é, il ne correspond plus et WordPress rejette la valeur. Réparez donc d’abord les tables de contenu comme wp_posts, wp_comments et wp_terms. Pour les options, wp search-replace de WP-CLI est le meilleur outil, car il met à jour les longueurs.

Corriger la cause dans MySQL

  • Passez les tables et la connexion en utf8mb4 et définissez define('DB_CHARSET', 'utf8mb4'); dans wp-config.php.
  • Si une colonne latin1 contient des octets UTF-8, ne la convertissez pas directement : cela l’encoderait une seconde fois. Le chemin habituel passe par un type binaire : d’abord MODIFY … LONGBLOB, puis MODIFY … LONGTEXT CHARACTER SET utf8mb4.
  • Testez chaque modification d’abord sur une copie de la base.

Questions fréquentes

Puis-je réparer toute une base WordPress d’un coup ?

Oui, même de gros dumps SQL. Attention toutefois aux données sérialisées dans wp_options et wp_postmeta : WP-CLI s’en charge mieux.

Les caractères corrects du dump seront-ils modifiés ?

Non. Mojibuster ne répare que les suites clairement abîmées. Le texte correct reste tel quel.

Quelle différence entre utf8 et utf8mb4 ?

Dans MySQL, utf8 ne stocke que des caractères d’au plus trois octets : les émojis sont perdus. utf8mb4 est du vrai UTF-8, le bon choix pour WordPress.

Cela fonctionne-t-il avec d’autres systèmes que WordPress ?

Oui. Joomla, Drupal, Magento ou votre propre application sur MySQL ou MariaDB ont le même problème et la même solution.

Autres guides