Aide en ligne
Tous les articles

Caractères accentués : UTF-8, entités HTML et codes

Aujourd'hui, la règle est simple : on écrit les accents tels quels (é, à, ç, œ…) et on laisse l'UTF-8 faire le travail. Pour que cela fonctionne, il faut que le fichier soit enregistré en UTF-8 et que la page le déclare :

<meta charset="utf-8">

Le serveur peut aussi l'annoncer dans l'en-tête de la réponse : Content-Type: text/html; charset=UTF-8. Les codes ci-dessous ne servent que pour les cas où l'on ne peut pas taper le caractère directement.

Les caractères du français et leurs codes

Pour chaque caractère : son entité HTML, son numéro Unicode et ses octets en UTF-8 (en hexadécimal). Les entités HTML fonctionnent quel que soit l'encodage de la page.

Minuscules

CaractèreEntité HTMLCode décimalUnicodeOctets UTF-8
à &agrave; &#224; U+00E0 C3 A0
â &acirc; &#226; U+00E2 C3 A2
ä &auml; &#228; U+00E4 C3 A4
é &eacute; &#233; U+00E9 C3 A9
è &egrave; &#232; U+00E8 C3 A8
ê &ecirc; &#234; U+00EA C3 AA
ë &euml; &#235; U+00EB C3 AB
î &icirc; &#238; U+00EE C3 AE
ï &iuml; &#239; U+00EF C3 AF
ô &ocirc; &#244; U+00F4 C3 B4
ö &ouml; &#246; U+00F6 C3 B6
ù &ugrave; &#249; U+00F9 C3 B9
û &ucirc; &#251; U+00FB C3 BB
ü &uuml; &#252; U+00FC C3 BC
ç &ccedil; &#231; U+00E7 C3 A7
œ &oelig; &#339; U+0153 C5 93
ÿ &yuml; &#255; U+00FF C3 BF

Majuscules

CaractèreEntité HTMLCode décimalUnicodeOctets UTF-8
À &Agrave; &#192; U+00C0 C3 80
 &Acirc; &#194; U+00C2 C3 82
Ä &Auml; &#196; U+00C4 C3 84
É &Eacute; &#201; U+00C9 C3 89
È &Egrave; &#200; U+00C8 C3 88
Ê &Ecirc; &#202; U+00CA C3 8A
Ë &Euml; &#203; U+00CB C3 8B
Î &Icirc; &#206; U+00CE C3 8E
Ï &Iuml; &#207; U+00CF C3 8F
Ô &Ocirc; &#212; U+00D4 C3 94
Ö &Ouml; &#214; U+00D6 C3 96
Ù &Ugrave; &#217; U+00D9 C3 99
Û &Ucirc; &#219; U+00DB C3 9B
Ü &Uuml; &#220; U+00DC C3 9C
Ç &Ccedil; &#199; U+00C7 C3 87
Œ &OElig; &#338; U+0152 C5 92
Ÿ &Yuml; &#376; U+0178 C5 B8

Ponctuation et symboles

CaractèreEntité HTMLCode décimalUnicodeOctets UTF-8
« &laquo; &#171; U+00AB C2 AB
» &raquo; &#187; U+00BB C2 BB
’ &rsquo; &#8217; U+2019 E2 80 99
… &hellip; &#8230; U+2026 E2 80 A6
€ &euro; &#8364; U+20AC E2 82 AC
° &deg; &#176; U+00B0 C2 B0

Taper un accent qui n'est pas sur le clavier

Quand utiliser une entité HTML

Quatre caractères doivent toujours être écrits sous forme d'entités dans le texte d'une page, car le navigateur leur donne un sens : &amp; pour &, &lt; pour <, &gt; pour > et &quot; pour un guillemet dans un attribut. En PHP, htmlspecialchars($texte, ENT_QUOTES, 'UTF-8') s'en charge. Pour les lettres accentuées, l'entité n'est utile que si le fichier n'est pas en UTF-8 ou si l'outil d'édition ne sait pas gérer ce caractère.

Des « é » à la place des accents

Quand un texte en UTF-8 est lu comme s'il était en Windows-1252 ou en ISO-8859-1, chaque caractère accentué, qui occupe deux ou trois octets, s'affiche sous la forme de deux ou trois caractères bizarres :

Texte vouluTexte affiché
éé
èè
àà
çç
êê
ôô
ùù
ûû
îî
œÅ“
Չ۪
€â‚¬

Pour corriger le problème, vérifiez dans l'ordre :

  1. le fichier est enregistré en UTF-8, de préférence sans BOM ;
  2. la page déclare <meta charset="utf-8">, ou le serveur envoie charset=UTF-8 ;
  3. la base de données et la connexion sont en utf8mb4 (avec PDO : mysql:host=…;dbname=…;charset=utf8mb4) ;
  4. le texte n'est pas converti deux fois : appliquer une conversion UTF-8 sur un texte qui l'est déjà produit justement ces « é ».

En PHP, les fonctions utf8_encode() et utf8_decode() sont obsolètes depuis PHP 8.2 : elles ne savent convertir que depuis et vers l'ISO-8859-1. Utilisez mb_convert_encoding($texte, 'UTF-8', 'ISO-8859-1') en précisant l'encodage d'origine.