migration 1.9 vers 4.1.15 pb encodage iso -> utf-8

Bonjour,

Je migre un site SPIP1.9.2 vers SPIP4.1.5 (en changeant de serveur) et je rencontre un problème d’encodage.
En bref, si les titres s’affichent correctement, les textes ne s’affichent pas correctement.
Si change l’encodage (iso-8859-1 → vers utf-8) sur la page /ecrire/?exec=config_lang la langue c’est le contraire.
Les erreurs de visualisation se produisent aussi bien sur le site public et sur l’interface administration.

Voici comment j’ai fait la migration :

Dump de la base
mysqldump -h localhost -u user -p base_spip > /home/utilisateur/backup_base.sql
(sans spécifier de collation)
Je charge le DUMP sur le nouveau serveur
sudo mysql;
use base_spip;
mysql> source backup_base.sql

Je charge les fichiers spip 4.1.15 sur le nouveau serveur
Je charge les répertoires IMG et squelettes de l’ancien site
Je lance le site /ecrire
La mise à jour se passe bien (je dois créer la table spip_urls) et une table de jonction pour les documents.

Site de départ
dans /ecrire/?exec=config_lang la langue est iso-8859-1
SPIP 1.9.2
PHP 5.1.6
LANG => fr_FR.UTF-8
sur certains squelettes il y a un charset=iso-8859-1"

voici la description de la table spip_articles

mysql> SHOW FULL COLUMNS FROM spip_articles ;
±---------------±-------------------------------±------------------±-----±----±--------------------±---------------±--------------------------------±--------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
±---------------±-------------------------------±------------------±-----±----±--------------------±---------------±--------------------------------±--------+
| id_article | bigint(21) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| surtitre | text | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| titre | text | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| soustitre | text | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| id_rubrique | bigint(21) | NULL | NO | MUL | 0 | | select,insert,update,references | |
| descriptif | text | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| chapo | mediumtext | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| texte | longblob | NULL | NO | | NULL | | select,insert,update,references | |
| ps | mediumtext | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| date | datetime | NULL | NO | | 0000-00-00 00:00:00 | | select,insert,update,references | |
| statut | varchar(10) | latin1_swedish_ci | NO | MUL | 0 | | select,insert,update,references | |
| id_secteur | bigint(21) | NULL | NO | MUL | 0 | | select,insert,update,references | |
| maj | timestamp | NULL | NO | | CURRENT_TIMESTAMP | | select,insert,update,references | |
| export | varchar(10) | latin1_swedish_ci | YES | | oui | | select,insert,update,references | |
| date_redac | datetime | NULL | NO | | 0000-00-00 00:00:00 | | select,insert,update,references | |
| visites | int(11) | NULL | NO | | 0 | | select,insert,update,references | |
| referers | int(11) | NULL | NO | | 0 | | select,insert,update,references | |
| popularite | double | NULL | NO | | 0 | | select,insert,update,references | |
| accepter_forum | char(3) | latin1_swedish_ci | NO | | | | select,insert,update,references | |
| date_modif | datetime | NULL | NO | MUL | 0000-00-00 00:00:00 | | select,insert,update,references | |
| lang | varchar(10) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |
| langue_choisie | char(3) | latin1_swedish_ci | YES | | non | | select,insert,update,references | |
| id_trad | bigint(21) | NULL | NO | MUL | 0 | | select,insert,update,references | |
| nom_site | tinytext | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| url_site | varchar(255) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |
| extra | longblob | NULL | YES | | NULL | | select,insert,update,references | |
| idx | enum(’’,‹ 1 ›,‹ non ›,‹ oui ›,‹ idx ›) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |
| id_version | int(10) unsigned | NULL | NO | | 0 | | select,insert,update,references | |
| url_propre | varchar(255) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |
±---------------±-------------------------------±------------------±-----±----±--------------------±---------------±--------------------------------±--------+

mysql> show variables like ‹ char% ›;
±-------------------------±---------------------------+
| Variable_name | Value |
±-------------------------±---------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
±-------------------------±---------------------------+

Quand je fais un select mysql sur un enregistrement de spip_articles, le titre est correctement visualisé avec les accentes. Par contre les caractères accentués du texte apparaissent comme des points d’interrogation entourés d’un carré


Site d’arrivée
SPIP 4.1.5
PHP 7.4.30
$_SERVER[‹ LANG ›] => en_US.UTF-8
je n’ai pas touché aux squelettes avec charset=iso-8859-1"

voici la description de la table spip_articles

mysql> SHOW FULL COLUMNS FROM spip_articles ;

±---------------±-------------------------------±-------------------±-----±----±--------------------±------------------------------±--------------------------------±--------+
| Field | Type | Collation | Null | Key | Default | Extra | Privileges | Comment |
±---------------±-------------------------------±-------------------±-----±----±--------------------±------------------------------±--------------------------------±--------+
| id_article | bigint(21) | NULL | NO | PRI | NULL | auto_increment | select,insert,update,references | |
| surtitre | text | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| titre | text | latin1_swedish_ci | YES | | NULL | | select,insert,update,references | |
| soustitre | text | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| id_rubrique | bigint(21) | NULL | NO | MUL | 0 | | select,insert,update,references | |
| descriptif | text | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| chapo | mediumtext | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| texte | longblob | NULL | NO | | NULL | | select,insert,update,references | |
| ps | mediumtext | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| date | datetime | NULL | NO | | 0000-00-00 00:00:00 | | select,insert,update,references | |
| statut | varchar(10) | latin1_swedish_ci | NO | MUL | 0 | | select,insert,update,references | |
| id_secteur | bigint(21) | NULL | NO | MUL | 0 | | select,insert,update,references | |
| maj | timestamp | NULL | NO | | current_timestamp() | on update current_timestamp() | select,insert,update,references | |
| export | varchar(10) | latin1_swedish_ci | YES | | oui | | select,insert,update,references | |
| date_redac | datetime | NULL | NO | | 0000-00-00 00:00:00 | | select,insert,update,references | |
| visites | int(11) | NULL | NO | | 0 | | select,insert,update,references | |
| referers | int(11) | NULL | NO | | 0 | | select,insert,update,references | |
| popularite | double | NULL | NO | | 0 | | select,insert,update,references | |
| accepter_forum | char(3) | latin1_swedish_ci | NO | | | | select,insert,update,references | |
| date_modif | datetime | NULL | NO | MUL | 0000-00-00 00:00:00 | | select,insert,update,references | |
| lang | varchar(10) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |
| langue_choisie | char(3) | latin1_swedish_ci | YES | | non | | select,insert,update,references | |
| id_trad | bigint(21) | NULL | NO | MUL | 0 | | select,insert,update,references | |
| nom_site | tinytext | latin1_swedish_ci | NO | | NULL | | select,insert,update,references | |
| url_site | text | latin1_swedish_ci | NO | MUL | ‹  › | | select,insert,update,references | |
| extra | longblob | NULL | YES | | NULL | | select,insert,update,references | |
| idx | enum(’’,‹ 1 ›,‹ non ›,‹ oui ›,‹ idx ›) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |
| id_version | int(10) unsigned | NULL | NO | | 0 | | select,insert,update,references | |
| url_propre | varchar(255) | latin1_swedish_ci | NO | MUL | | | select,insert,update,references | |
| virtuel | text | latin1_swedish_ci | NO | | ‹  › | | select,insert,update,references | |
±---------------±-------------------------------±-------------------±-----±----±--------------------±------------------------------±--------------------------------±--------+

MariaDB [(none)]> show variables like ‹ char% ›;.
±-------------------------±---------------------------+
| Variable_name | Value |
±-------------------------±---------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | utf8mb4 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8mb4 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
±-------------------------±---------------------------+

Pour les problème de conversion iso => utf8 tu as deux options que j’ai déjà cité ici Passage à SPIP 4.0.1 : plus de TEXTE lors de la modification d'article - #4 par b_b :slight_smile:

1 « J'aime »

Merci pour cette réponse. J’avais déjà essayé la méthode décrite ici:
http://zzz.rezo.net/Reparer-le-charset-d-une-base-SPIP.html
sans succès.
Comme elle était proposée, j’ai essayé à nouveau.

En gros (pour ceux qui seraient intéressés par ce post)
On fait deux dump de la base de départ (un pour la structure, un pour les données) on remplace les occurrences latin1 par utf8
On recharge les deux dump dans la base d’arrivée.

Le seul détail qui me manquant était celui-ci.
en ouvrant le fichier dump avec Notepad++ il était encodé en ANSI.
Je l’ai converti en UFT8, toujours avec notepad++

et après importation, plus de problèmes de codification (il était nécessaire dans l’interface admin de SPIP de changer la codification et passer en utf-8 (avec le tiret))

Super, content que tu aies pu régler ton problème :slight_smile: