Dynamic-Mess.com


"The world is a dynamic mess of jiggling things..."

Utiliser l'encodage en UTF-8 pour vos sites Internet

Article posté le 13-08-2012 dans la catégorie Web

Article mis à jour le : 05-05-2022

Explication sur l'encodage UTF-8, et comment bien l'utiliser pour vos sites Internet

Pourquoi utiliser UTF-8 au lieu de iso-8859-1 (également appelé latin-1)?

L'encodage iso-8859-1 vous limite à 256 caractères au maximum, car il n'est encodé que sur un 1 octet. Etant donné qu'un octet fait 8 bits, qu'il y a deux états possibles, le 0 et le 1, cela nous fais 2^8 = 256 caractères différents au maximum.

Pour en savoir plus.

Comment bien paramétrer son projet?

1- Paramétrer PHP

La méthode la plus simple consiste à placer cette ligne dans votre .htaccess à la racine de votre site :

php_flag default_charset utf-8€€‹

2- Bien paramétrer sa base de données

Pour bien paramétrer votre base de données, il faut penser lorsque vous créer des champs, texte par exemple (TEXT), il faut préciser l'encodage en UTF8. Sous PHPmyAdmin par exemple, il s'agit du champ "interclassement", et choisir "utf8_general_ci".

Vous pouvez aussi la créer via une requête SQL :

CREATE TABLE votre_table (
  ID int(11) NOT NULL auto_increment,
  NOM varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,
  PRIMARY KEY  (id)
) DEFAULT CHARSET=utf8;

De plus, vous pouvez aussi convertir une table existente :

ALTER TABLE `votre_table` CONVERT TO CHARACTER SET utf8

3- Bien paramétrer ses outils

Il s'agit de vérifier que vos fichiers, donc ce de votre site, soit bien encodés en utf8. Pour cela, il faut voir avec votre éditeur. NetBeans le fait pas défaut, mais pour Notepad ++, ce n'est pas le cas. Sur ce dernier, il faut aller dans "Paramétrage", "Préférences", sélectionner l'onglet "Nouveau document" -> "Répertoire" puis cocher "UTF-8 sans BOM". Notez que vous pouvez aussi convertir des fichiers existants dans notepad++ : pour cela il vous suffit de cliquer sur "Encodage" -> "Convertir en UTF8 sans BOM" puis enregistrer.

4- Bien communiquer avec sa base de données

Il s'agit de spécifier l'encodage des données qui sont véhiculées par la requête. Pour cela on le spécifie avant cette dernière (ici sous mysql) :

<?php
    mysql_connect ('localhost', 'root', '');
    mysql_set_charset ('UTF8'); 
?>

Si vous utilisez PDO, ce n'est guère plus compliqué :

<?php $madb = new PDO ('mysql:host=localhost;dbname=MaDB', 'root', '', array (PDO::MYSQL_ATTR_INIT_COMMAND => 'SET DONNEES 'UTF8'')); ?>

5- Modifier l'entête envoyée par le serveur

Si vous travaillez sous apache, sachez que ce dernier n'utilise pas UTF8 par défaut. Il faut donc le préciser pour ses requêtes, via le fichier .htaccess encore :

AddDefaultCharset UTF-8

Modifier l'entête de page, que le navigateur soit informé de l'encodage

Pour cela il existe deux méthodes: Soit dans le header (donc avant d'afficher du code) :

header('Content-Type: text/html; charset=utf-8');

Soit via cette balise meta entre les balises <header> et </header> de votre site :

€€‹<meta http-equiv="Content-type" content="text/html; charset=utf-8" />€€‹

La première méthode prendra toujours le dessus si jamais les deux sont présentes. Cependant, sachez que la première présente l'avantage d'éviter les surprises si jamais vos fichiers HTML ne précisent pas d'encodage en entête.

Vous pouvez aussi forcer l'encodage dans les formulaires :

<form accept-charset="utf-8">
...

Enfin, vous pouvez garder sous la main cette petite fonction PHP qui pourait vous être utile en milieu hostile :

string utf8_encode ( string $data )
Exemple :
$maChaine = utf8_encode ( $maChaine ); // encore le contenu de la variable en UTF8

Vous pouvez aussi utiliser cette fonction qui retire tous les caracères UTF-8 non supportés dans les fichiers XML :

function utf8_for_xml($string)
  {
    return preg_replace('/[^x{0009}x{000a}x{000d}x{0020}-x{D7FF}x{E000}-x{FFFD}]+/u',
                        ' ', $string);
  }

 

Voilà, normalement, vous êtes parés pour faire un site plein d'accents !


Cet article vous a plu? Découvrez d'autres articles :


comments powered by Disqus