PHP/HTML - caractères accentués et l'UTF8

jordane45 Messages postés 38136 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 16 avril 2024 - 2 mai 2022 à 19:26

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://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
https://forums.commentcamarche.net/forum/affich-37636387-php-notice-undefined-index