Html/Php -caractères accentués et l'UTF8

Décembre 2016


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 :

http://www.commentcamarche.net/faq/44117-connexion-a-une-base-avec-pdo-mysqli
http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs
http://www.commentcamarche.net/faq/1391-php-notice-undefined-index

A voir également :

Ce document intitulé «  Html/Php -caractères accentués et l'UTF8  » issu de CommentCaMarche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.