Utiliser un encodage UTF-8

Cet article va vous expliquer comment configurer votre site TYPO3 pour qu’il utilise  UTF-8 au lieu de  ISO 8859-1 (aussi appelé Latin1) comme encodage des caractères, que ce soit dans la base de données ou lors du rendu des pages.

Les informations sont tirées d’une part de mon expérience personnelle et d’autre part de deux sources essentiellement :

Les points suivants expliquent comment créer un nouveau site TYPO3 en UTF-8. Si vous désirez convertir un site existant, vous pouvez vous rendre directement à la partie concernant la conversion d'une base de données existante.

Création de la base de données au format UTF-8

Voici les commandes SQL à effectuer. Nous utilisons ci-dessous la collation utf8_general_ci car cette dernière autorise des recherches insensibles à la casse, ce qui est souhaité dans la plupart des cas.

Création de la base de données :

CREATE DATABASE db_name DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;
GRANT ALL PRIVILEGES ON db_name.* TO username@localhost IDENTIFIED BY 'password';

Configuration de l'environnement

Apache (facultatif)

Ajoutez la ligne

AddDefaultCharset utf-8

à la définition de votre virtual host.

PHP

Dans le fichier php.ini, chargez les bibliothèques nécessaires :

extension=php_iconv.so
extension=php_mbstring.so

TYPO3 utilisera la bonne grâce au changement de configuration du fichier localconf.php (voir ci-dessous).

Remarque pour Debian

Sur un serveur Debian, il ne faudrait pas modifier le fichier php.ini directement mais plutôt créer deux fichiers dans /etc/php5/conf.d :

php_iconv.ini

# configuration for php iconv module
extension=php_iconv.so

php_mbstring.ini

# configuration for php mbstring module
extension=php_mbstring.so

Néanmoins, avec PHP 5.2, l’inclusion de ces bibliothèques n’est pas nécessaire.

Install tool de TYPO3

Dans la 5e option du menu :

  • setDBinit est renseigné de la manière suivante :
SET NAMES utf8
  • UTF8filesystem est une option non cochée
  • forceCharset = utf-8

La plupart du temps, il est suffisant d’éditer le fichier localconf.php pour y ajouter :

// For backend charset
$TYPO3_CONF_VARS['BE']['forceCharset'] = 'utf-8';
 
// For GIFBUILDER support
// Set it to 'iconv' or 'mbstring'
$TYPO3_CONF_VARS['SYS']['t3lib_cs_convMethod'] = 'iconv';
$TYPO3_CONF_VARS['SYS']['t3lib_cs_utils'] = 'iconv';
 
$TYPO3_CONF_VARS['SYS']['setDBinit'] = 'SET NAMES utf8;';

Configuration TypoScript

Maintenant que le backend a été configuré, il reste à s’assurer que les pages générées utilisent bien l’encodage UTF-8.

La configuration d’Apache comme expliquée ci-dessus n’est pas toujours possible selon les accès que l’on a sur le serveur TYPO3. Mais il est toujours bon de rajouter la configuration suivante à la partie Setup de son Template :

config.doctype = xhtml_trans
config.renderCharset = utf-8
config.additionalHeaders = Content-Type:text/html;charset=utf-8
config.xhtml_cleaning = all

Non seulement le header HTTP est modifié mais le charset correct est également transmis au navigateur.

Voici les informations retournées :

Header HTTP
Content-type: text/html; charset=utf8
Caractère d’encodage XML
<?xml version="1.0" encoding="utf-8"?>
Balise meta
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Conversion d'une base de données existante

Si vous êtes comme moi, vous avez certainement installé TYPO3 la première fois sans vous soucier de savoir si la base de données était en UTF-8 ou pas. Voici comment convertir une base de données encodée en ISO 8859-1 en un encodage UTF-8.

Commençons par exporter la base de données depuis un shell sur le serveur MySQL :

$ mysqldump -u (user) -p db_name > dump.sql

Puis corrigeons le fichier :

$ sed -e 's/latin1/utf8/g' -i dump.sql

Réimportons la base de données :

$ mysql -u (user) -p --default-character-set=utf8 db_name < dump.sql

Et changeons les paramètres de la base de données :

$ mysql -u (user) -p \
-e "ALTER DATABASE \`db_name\` DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci"

Vous pouvez également donner sa chance à  un script de conversion écrit par Jigal van Hemert, qui fonctionne de façon complètement automatique.

Réencodage de fichiers

Si vous utilisez TemplaVoilà! par exemple, vous devrez certainement réencoder vos fichiers de modèles en UTF-8. C’est très simple puisqu’il suffit d’utiliser la commande iconv :

$ iconv -f iso-8859-1 -t utf-8 source.html > dest.html
Flattr