1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !
RĂ©soudre les soucis d'encodage des pages
Ce guide vous concerne si vous rencontrez des problèmes d'encodage de pages et des caractères bizarres qui apparaissent sur vos pages.
Encodage universel
Si vous rencontrez des problèmes d'encodage de pages, il est important de vérifier que l'encodage de votre page est bien défini en UTF-8. UTF-8 est un encodage universel qui prend en charge la plupart des caractères utilisés dans le monde. Il peut arriver que certains fichiers contiennent des caractères incompatibles avec l'encodage UTF-8. Dans ce cas, vous devez les convertir en UTF-8 à l'aide d'un éditeur de texte approprié.
Si le codage de la page HTML est p.ex en UTF8 alors que la base de données est en latin-1 les accents ne vont pas être interprétés correctement par MySQL. Si les pages contiennent des caractères spéciaux (textes arabes, chinois, accents) ils peuvent s'affichent correctement sur votre site Web mais pas dans phpMyAdmin, ou inversement...
Utiliser un éditeur de texte capable d'enregistrer vos fichiers en UTF8. Si vous importez des fichiers texte avec du code SQL à l'intérieur, il faut les éditer avec un logiciel qui enregistre en UTF8.
UTF8 en PHP
Pour forcer les headers du site en UTF-8 en utilisant PHP, vous pouvez utiliser la fonction header()
avec le paramètre Content-Type
. Voici un exemple de code qui permet de forcer l'encodage des caractères en UTF-8:
<?php
header('Content-Type: text/html; charset=utf-8');
?>
UTF8 via .htaccess
Pour forcer l'encodage des caractères en UTF-8 via le fichier .htaccess de votre site, pour du contenu HTML ajouter:
AddDefaultCharset utf-8
Header set Content-Type "text/html; charset=utf-8"
et pour du contenu PHP ajouter:
php_value default_charset UTF-8
php_value mbstring.internal_encoding UTF-8
UTF8 en HTML
Pour spécifier l'encodage des caractères en UTF-8 dans le code HTML, vous pouvez utiliser la balise meta charset
:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Titre de la page</title>
</head>
<body>
<!-- Contenu de la page -->
</body>
</html>
Assurez-vous également que tous les fichiers utilisés sur votre site Web, tels que les fichiers de style CSS et les scripts JavaScript, sont également encodés en UTF-8. Cela garantit que tous les caractères sur votre site Web seront affichés correctement.
UTF8 en base de données
Pour (re)déclarer l'encodage des bases de données et des tables en UTF-8 dans phpMyAdmin, vous pouvez suivre les étapes suivantes:
- se connecter Ă votre panneau de contrĂ´le phpMyAdmin
- cliquer sur l'onglet "Opérations" en haut
- dans la section "Options de la table", rechercher la ligne "Collation" et cliquer sur le bouton déroulant
- sélectionner une option de collation qui utilise l'encodage UTF-8, par exemple
utf8_general_ci
- cliquer sur le bouton "Exécuter" en bas de la page pour enregistrer les modifications
Ajouter la fonction PHP mysql_set_charset à la connexion créée par mysql_connect afin de déterminer l'encodage de cette connexion (si vous ne la spécifiez pas, la valeur par défaut de ce paramètre peut varier d'un serveur à l'autre):$connection = mysql_connect($server, $username, $password);
mysql_set_charset('utf8', $connection);
Vous pouvez également modifier ce paramètre par défaut sur tout votre hébergement en suivant cette documentation.
Une fois la connexion MySQL établie depuis un script PHP, vous pouvez aussi spécifier le type de charset UTF8 avec ces commandes:mysql_query("SET NAMES 'utf8';");
mysql_query("SET CHARACTER SET 'utf8';");
Accents / caractères spéciaux
Si vous récupérez un dump MySQL (sauvegarde) et que vous l'importez dans votre base de données, il peut arriver que tous les accents soient remplacés par des caractères bizarres (des "?" p.ex.).
Les sauvegardes des bases MySQL sont faites au format UTF8. Les caractères accentués sont alors codés sur deux octets. L'importation de ces sauvegardes ne pose pas de problème sur les serveurs, cependant à vous d'adapter votre configuration maison pour l'importation en local des bases en UTF8 sur votre poste.
Vous pouvez par exemple faire une conversion utf8 -> latin1 du fichier SQL avant importation.
Sinon, lors de l'importation de la base, il vous suffit de spécifier que votre fichier d'entrée est au format iso-latin1 (section importer, "Jeux de caractère du fichier") et l'importation se déroulera correctement.
Quand les chars spéciaux sont convertis en '?', il est probable que le fichier que vous importez est en format non-UTF8 et le software est configuré pour importer un fichier UTF-8. Linux peut faire la conversion vers UTF-8 avec la commande 'iconv'.