1 000 FAQ, 500 tutoriels et vidéos explicatives. Ici, il n'y a que des solutions !
Résoudre un problème d'encodage des pages
Ce guide vous concerne si vous rencontrez des problèmes d'encodage de pages et des caractères anormaux 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 UTF-8 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 UTF-8. Si vous importez des fichiers texte avec du code SQL à l'intérieur, il faut les éditer avec un logiciel qui enregistre en UTF-8.
UTF-8 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');
?>
UTF-8 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
UTF-8 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:
- Connectez-vous Ă votre panneau de contrĂ´le phpMyAdmin.
- Cliquez sur l'onglet "Opérations" en haut.
- Dans la section "Options de la table", recherchez la ligne "Collation" et cliquer sur le bouton déroulant.
- Séelctionnez une option de collation qui utilise l'encodage UTF-8, par exemple
utf8_general_ci
. - Cliquez sur le bouton "Exécuter" en bas de la page pour enregistrer les modifications.
Ajoutez 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
Lorsque vous récupérez une sauvegarde de votre base de données MySQL (appelée "dump") et que vous l'importez dans votre propre base de données, il se peut que les accents (comme é, à , ô) apparaissent sous forme de symboles étranges, comme des points d'interrogation (p.ex "?" à la place d’un accent).
Cela arrive parce que les sauvegardes MySQL sont généralement créées en utilisant un format spécial appelé UTF-8
. Dans ce format, les lettres avec des accents utilisent plus d'espace (elles sont codées sur deux octets, un peu comme deux "unités" de données par caractère). Sur les serveurs, cela fonctionne bien, mais si vous travaillez sur votre ordinateur personnel, vous devrez peut-être ajuster certaines configurations pour que l'importation se fasse correctement en utilisant UTF-8
. Le problème des caractères étranges survient généralement lorsqu'il y a un désalignement d'encodage entre le fichier de sauvegarde et l'importation. Cela peut se produire si le fichier est encodé dans un format (p.ex UTF-8
) mais que MySQL s'attend Ă un autre encodage (p.ex latin1
).
Voici quelques solutions :
- Convertir le fichier : Vous pouvez convertir le fichier de sauvegarde de
UTF-8
vers un autre format, appelélatin1
, avant de l'importer dans votre base de données. Cela peut éviter que les accents soient mal interprétés mais cela comporte des limitations. Si le fichier contient des caractères qui ne peuvent pas être représentés enlatin1
(comme certains caractères spéciaux ou non européens), vous risquez de perdre ces caractères lors de la conversion. C’est donc une solution à utiliser avec précaution, et elle dépend du type de données présentes dans votre fichier SQL. - Spécifier le bon format lors de l'importation : Si vous n’avez pas converti le fichier, vous pouvez indiquer, lors de l’importation, que le fichier est au format
iso-latin1
(lors de l'importation d'un fichier SQL, vous pouvez indiquer explicitement que le fichier est en ISO-8859-1, aussi appelé latin1). Cela permet d'aligner l'encodage du fichier avec celui attendu par MySQL, ce qui résout généralement le problème des caractères mal affichés.
Si vous voyez des points d'interrogation Ă la place des accents, cela signifie probablement que le fichier de sauvegarde est dans un format autre que UTF-8
, mais que votre logiciel tente de l’importer comme s’il était en UTF-8
. Pour éviter cela, sous Linux, vous pouvez utiliser une commande appelée iconv
pour convertir le fichier en UTF-8 avant l'importation. Cela permet de s'assurer que l'encodage est cohérent avec les attentes de MySQL.