Configurations des entêtes en:
1)HTML:
Il vous suffit d'indiquer le charset dans une balise meta à la suite de la balise head
Code:
1 2 3 4
| <head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8"/>
...
</head> |
Cette ligne doit logiquement être la première suivant la balise <head> puisqu'elle indique au navigateur l'encodage utilisé.
Attention, l'entête envoyée par le serveur sera prioritaire sur cette déclaration html
2) APACHE:
Comme mentionné en préambule, le serveur apache envoie (généralement pour l'instant) des entêtes à la norme ISO-8859-1.
- Si vous avez accès à la configuration du serveur > httpd.conf, ajoutez l'une ou l'autre des lignes
Code:
AddDefaultCharset UTF-8
#ou
Code:
AddDefaultCharset Off
Avec la deuxième solution le serveur se renseigne sur l'entête http et sera donc en cohérence avec le charset indiqué dans la page html.
- Sans accès à la configuration du serveur vous pouvez mettre l'une ou l'autre des lignes ci-dessus dans un fichier .htaccess
- Sinon indiquez au début de vos pages php
Code:
header('Content-Type: text/html; charset=UTF-8');
Cette dernière solution permet un meilleur portage de vos scripts.
3) PHP
Configuration php.ini
Le module "mbstring" s'occupe de la manipulation des chaînes tandis que le module "iconv" permet de convertir différents types d'encodages.
Les conversions entre ISO et UTF-8 peuvent se réaliser à l'aide des fonctions utf8_encode() et utf8_decode().
Dans la plupart des cas vous n'aurez pas à intervenir sur la configuration du php.ini.
Utilisation des fonctions de traitement des chaines multi octets
Pour reprendre l'exemple initial, mb_strlen() sera utilisée à la place de strlen().
Liste des fonctions adaptées au traitement des chaines UTF-8
PHP travaille pour l'instant en ISO, il faudra donc spécifier l'encodage utilisé pour les fonctions qui le demande ou modifier l'encodage initial.
Code:
1 2 3 4 5 6
| echo mb_internal_encoding(); //affiche ISO-8859-1
echo mb_strlen('aé');// affiche 3
echo mb_strlen('aé',"utf-8");// affiche 2
mb_internal_encoding("UTF-8");// indique d'utiliser l'encodage UTF-8
echo mb_strlen('aé');// affiche 2 |
4) MySql
Pour MySql comme pour toute autre base de donnée il est préférable de créer votre base en spécifiant l'encodage utf8_general_ci.
Cette possibilité est cependant rarement disponible sur les serveurs mutualisés. Pour contourner ce problème et une meilleure portabilité de votre code, vous pouvez indiquer l'encodage à utiliser en envoyant la requête "SET NAMES UTF8" juste après la connexion à votre base.
Code:
1 2
| mysql_select_db($database, $connection);
mysql_query("SET NAMES 'utf8'"); |
Pour les versions PHP 5 >= 5.2.3 et MySQL version 5.0.7 ou supérieure, utilisez de préférence mysql_set_charset
Vos tables doivent également être créées en utilisant l'Interclassement utf8_general_ci via phpMyAdmin, ou dans une fenêtre sql :
Code:
1 2 3 4 5
| CREATE TABLE IF NOT EXISTS `membres` (
`pseudo` varchar(100) NOT NULL,
`pass` varchar(100) character set utf8 collate utf8_bin NOT NULL,
PRIMARY KEY (`pseudo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8; |
Dans cet exemple le champ "pass" est formaté avec "collate utf8_bin" pour être sensible à la casse.