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.
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';
Ajoutez la ligne
AddDefaultCharset utf-8
à la définition de votre virtual host.
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).
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.
Dans la 5e option du menu :
setDBinit est renseigné de la manière suivante :SET NAMES utf8
UTF8filesystem est une option non cochéeforceCharset = utf-8La 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;';
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 :
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"
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