Html/Php -caractères accentués et l'UTF8
Une question revient très régulièrement sur le forum .....<< comment faire pour que les accents soient correctement affichés sur mes pages ? >>
Une des solutions consiste à utiliser l' UTF8
1 - Vérifiez l'encodage des fichiers
Les fichiers (.php .html..) de votre site doivent être encodé en UTF8 (de préférence : sans BOM)
Pour ce faire, vous pouvez utiliser votre éditeur de texte préféré (ou votre EDI (ou IDE..))
Par exemple :
- Notepad++ : Aller dans Format > Encoder en UTF-8 (sans BOM).
- Dreamweaver : Aller dans Modifier > Propriétés de la page > Titre/Codage.
- Aptana : Aller dans Edit > Set Encoding.
- Bloc notes Windows : Aller dans Fichier > Enregistrer sous... > Sélectionner UTF-8 dans la liste Codage.
- PHPDesigner : Aller dans Fichier > Encodage du fichier > Sélectionner UTF-8 dans la liste.
- PHPEdit : Dans la barre des tâches, sélectionner UTF-8 sans marque d'ordre des octets dans la liste.
- UltraEdit : Aller dans Fichier > Conversions > ASCII vers UTF-8.
2 - Assurez-vous que vous avez bien paramétré la connexion à votre BDD
En PDO par exemple vous pouvez spécifier l'encodage lors de la connexion en y ajoutant le charset
try{ $bdd =new PDO('mysql:host=localhost; dbname=mabdd; charset=utf8', 'user', 'password'); $bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ); } catch(PDOException $e) { die('Erreur : ' . $e->getMessage()); }
En Mysqli on utilisera l'instruction
//Style Orienté objet $link->set_charset("utf8") // Style procédural mysqli_set_charset($link, "utf8")
$link représentant la connexion.
3 - Déclarez l'encodage dans vos pages
Cette déclaration se fait dans le header de vos pages
En HTML, dans la balise HEAD vous pouvez par exemple utiliser:
meta http-equiv="Content-Type" content=\"text/html; charset=UTF-8\"
ou (en HTML5)
meta charset="UTF-8"
En PHP vous pouvez vous servir de l'instruction :
header( 'content-type: text/html; charset=utf-8' );
4 - Vérifiez que vos BDD sont bien en UTF8
(le plus souvent dans une BDD mysql on utilisera l'encodage utf8-general-ci ou utf8_unicode_ci)
NB: Si vous aviez déjà effectué des insertions en BDD... controllez que les caractères accentués apparaissent correctement dans vos tables....
5 - Utf8_encode / Utf8_decode
Retirez bien toutes les instructions Utf8_encode / Utf8_decode que vous auriez pu mettre dans vos scripts.
A lire aussi
Je vous invite également à consulter les pages suivantes :
https://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
https://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
https://www.commentcamarche.net/faq/1391-php-notice-undefined-index