Ceci est une ancienne révision du document !
Convertir un site en UTF-8
1/- Si on a la possibilité d’avoir accès au fichier de configuration Apache httpd.conf, rajouter en fin de fichier :
AddDefaultCharset UTF-8
(S’il existe une ligne AddDefaultCharset ISO-8859-1
, la commenter)
Ce réglage permettra à Apache d’envoyer les entêtes avec l’encodage UTF-8 pour les fichiers PHP et les fichiers HTML
2/- Si on a pas accès à ce fichier, modifier le fichier de configuration php.ini en décommentant la ligne : default_charset=“utf-8” Rajouter dans chaque fichier HTML le type d’encodage : <meta http-equiv=“Content-type” content=“text/html; charset=utf-8” />
3/- Si on a pas accès au fichier de configuration php.ini, créer ou modifier le fichier .htaccess, situé à la racine du projet, afin d’y insérer une instruction : php_flag default_charset utf-8 Rajouter dans chaque fichier HTML le type d’encodage : <meta http-equiv=“Content-type” content=“text/html; charset=utf-8” />
4/- Enfin, ultime solution si les 3 précédentes ont échouées, configurer l’entête de chaque page : PHP : header ('Content-type:text/html; charset=utf-8'); HTML : <meta http-equiv=“Content-type” content=“text/html; charset=utf-8” />
ATTENTION à n’utiliser qu’une seule des 4 solutions ci-dessus car elles se substituent les unes aux autres avec certaines priorités. Il devient donc ensuite difficile de savoir laquelle impose l’encodage.
Encoder les fichiers PHP existant : Placer le fichier “utf8.php” (ci-joint) dans chaque dossier contenant des fichier PHP à convertir et l’exécuter depuis le navigateur.
Encoder les fichiers HTML : Ouvrir chaque fichier dans un éditeur du type Notepad++ et le convertir en “UTF-8 (sans BOM)”.
Encoder le base de données : Sur chaque table exécuter la commande suivante : ALTER TABLE `ma_table` CONVERT TO CHARACTER SET utf8
Spécifier l’encodage dans lequel sont encodées les données envoyées via une requête : Rajouter juste après le “mysql_connect” la commande : mysql_set_charset ('UTF8');
Si on utilise PDO, il suffit de passer un quatrième argument à son constructeur comme ceci :
$db = new PDO ('mysql:host=localhost;dbname=tests', 'root', , array (PDO::MYSQL_ATTR_INIT_COMMAND ⇒ 'SET NAMES \'UTF8\
));
Voici une astuce qui m’a permis de convertir une base SPIP complète en une seule fois. Seule contrainte, passer la commande de conversion sur un Linux : 1/- Faire un dump de la base complète soit avec PhpMyAdmin soit par la ligne de commande suivante mysqldump -u info -p –quote-names –set-charset –default-character-set=latin1 spip > monDossier/spip-latin1.sql
2/- Dans un terminal Linux convertir la BDD par la ligne de commande suivante cat monDossier/spip-latin1.sql |sed -e 's/latin1/utf8/g' > monDossier/spip-utf8.sql
3/- Réintégrer la base convertie avec PhpMyAdmin où par la ligne de commande suivante mysql -u info -p spip < monDossier/spip-utf8.sql
Document joint : utf8.php