PHP – SQL – script mise à jour caractères mals encodés é ô ë è

Il arrive que les caractères accentués en français soient mals enregistrés dans la base de donnée. Pour remédier (mettre à jour) rapidement à ce problème, il existe plusieurs solutions. Celle que nous allons voir aujourd’hui utilise la fonction de manipulation de caractère de SQL : REPLACE() .

La fonction replace de SQL en action

Utilisation 1 dans un SELECT : afficher la ligne avec l’iD 1 de la table table_name en remplaçant tous les mots INSULTE par CENSURE contenu dans la colonne col2 de table_name

SELECT `col1`, `col2`, REPLACE(`col3` ,'INSULTE','CENSURE') FROM `table_name` WHERE id = 1;

Utilisation 2 dans un SELECT : théoriquement REPLACE peut être utilisé sans table ni colonne, directement sur une chaine de caractère

SELECT REPLACE('une grosse INSULTE' ,'INSULTE','CENSURE');

Utilisation 3 dans un UPDATE : mettre à jour la table table_name en remplaçant le mot Hello par Bonjour contenu dans la colonne column_name pour toutes les lignes.

UPDATE `table_name` SET `column_name` = REPLACE('column_name' ,'Hello','Bonjour');

Utilisation 4 dans un UPDATE : mettre à jour la table table_name en remplaçant le mot Hello par Bonjour contenu dans la colonne column_name pour la ligne id = 1

UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'Hello','Bonjour') WHERE id = 1;

Utilisation 5 dans un UPDATE : mettre à jour la table table_name en remplaçant le mot Hello par Bonjour contenu dans la colonne column_name pour toutes les lignes contenant toto dans la colonne `column_name`

UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'Hello','Bonjour') WHERE `column_name` LIKE %toto%;

le script

Voici le script sql à adapter et exécuter dans la console sql dans PHPMyAdmin pour mettre à jour la ligne 1 de la table. Attention, il faut au préalable que la colonne mise à jour dispose de l’encodage utf8_general_ci.

UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'â','â') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'â','â') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'é','é') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à©','é') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'í©','é') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'Ã ','à') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'è','è') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'ç','ç') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'«','«') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'»','»') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,"’","'") ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'ê','ê') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'àª','ê') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'€','€') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'ô','ô') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'ä','ä') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'ù','ù') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'î','î') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à¨','è') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'àª','ê') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'Å“','œ') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à§','ç') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à»','û') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à®','î') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à´','ô') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à‰','é') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'à€','à') ;
UPDATE `table_name` SET `column_name` = REPLACE(`column_name` ,'Â','') ;

Equivalent en PHP

function toUtf8($string){
	$string = str_replace('â','â', $string);
	$string = str_replace('â','â', $string);
	$string = str_replace('é','é', $string);
	$string = str_replace('à©','é', $string);
	$string = str_replace('í©','é', $string);
	$string = str_replace('Ã ','à', $string);
	$string = str_replace('è','è', $string);
	$string = str_replace('ç','ç', $string);
	$string = str_replace('«','«', $string);
	$string = str_replace('»','»', $string);
	$string = str_replace("’","'", $string);
	$string = str_replace('ê','ê', $string);
	$string = str_replace('àª','ê', $string);
	$string = str_replace('€','€', $string);
	$string = str_replace('ô','ô', $string);
	$string = str_replace('ä','ä', $string);
	$string = str_replace('ù','ù', $string);
	$string = str_replace('î','î', $string);
	$string = str_replace('à¨','è', $string);
	$string = str_replace('àª','ê', $string);
	$string = str_replace('Å“','œ', $string);
	$string = str_replace('à§','ç', $string);
	$string = str_replace('à»','û', $string);
	$string = str_replace('à®','î', $string);
	$string = str_replace('à´','ô', $string);
	$string = str_replace('à‰','é', $string);
	$string = str_replace('à€','à', $string);
	$string = str_replace('Â','', $string);
	return $string;
}

Une liste des caractères accentués français encodés en UTF8