html_entity_decode()
Notre article présente la fonction PHP html_entity_decode(), utilisée pour convertir les entités HTML en leurs caractères correspondants.
La fonction PHP html_entity_decode() convertit les entités HTML (comme <, & ou ©) en leurs caractères correspondants (<, &, ©). Elle est l'inverse de htmlentities(), et c'est la fonction à utiliser lorsque vous devez transformer du HTML déjà encodé en texte lisible — par exemple, lors de la lecture de données stockées sous forme encodée ou lors du traitement de la sortie d'un système qui a échappé son HTML.
Cette page explique la syntaxe, chaque paramètre, les indicateurs qui contrôlent la gestion des guillemets, ainsi que les pièges courants (notamment en matière de sécurité).
Syntaxe
html_entity_decode(
string $string,
int $flags = ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401,
?string $encoding = null
): string| Paramètre | Requis | Description |
|---|---|---|
$string | Oui | La chaîne d'entrée contenant les entités HTML à décoder. |
$flags | Non | Un masque de bits qui contrôle quels guillemets sont décodés et quel type de document est supposé. |
$encoding | Non | L'encodage de caractères de l'entrée. Par défaut, utilise le paramètre ini default_charset (UTF-8 sur les versions modernes de PHP). |
La fonction retourne la chaîne décodée. Depuis PHP 8.1, la valeur par défaut de $flags est ENT_QUOTES | ENT_SUBSTITUTE | ENT_HTML401 ; les versions antérieures utilisaient ENT_COMPAT | ENT_HTML401 par défaut.
Exemple de base
Les entités < et > sont reconverties en < et >, ainsi la sortie est :
<h1>Hello World</h1>Contrôler les guillemets avec $flags
Le paramètre $flags détermine comment les guillemets simples et doubles sont traités :
| Indicateur | Décode |
|---|---|
ENT_COMPAT | Les guillemets doubles uniquement |
ENT_QUOTES | Les guillemets simples et doubles |
ENT_NOQUOTES | Ni les guillemets simples ni les guillemets doubles |
Ajoutez ENT_HTML401, ENT_HTML5, ENT_XML1 ou ENT_XHTML pour choisir l'ensemble d'entités, et ENT_SUBSTITUTE/ENT_IGNORE pour contrôler la gestion des séquences d'octets invalides. Utilisez ENT_QUOTES lorsque l'entrée peut contenir des guillemets simples encodés (' / ') :
Avec ENT_QUOTES, à la fois les balises et le guillemet simple encodé sont restaurés :
<p>I'm a paragraph</p>Spécifier l'encodage des caractères
Le troisième paramètre, $encoding, indique à PHP comment interpréter les octets d'entrée. Il utilise par défaut votre paramètre ini default_charset. Passez-le explicitement lorsque vous ne pouvez pas compter sur cette valeur par défaut — le plus souvent "UTF-8" :
ENT_HTML5 permet à PHP de reconnaître l'ensemble complet des entités nommées HTML5, de sorte que é et & sont décodés en :
Café & Co.Sécurité : ne pas décoder avant l'affichage
html_entity_decode() est l'opposé de l'échappement. Décoder du contenu fourni par l'utilisateur puis l'afficher dans une page réintroduit toutes les balises <script> ou les attributs que l'échappement avait supprimés, ouvrant ainsi une faille XSS. Ne décodez que lorsque vous avez besoin des caractères bruts à des fins non HTML (journalisation, comparaison, génération d'une version en texte brut, création d'un PDF, etc.). Lors de l'affichage dans du HTML, gardez les données échappées.
Fonctions associées
htmlentities()— l'inverse : convertit les caractères en entités HTML.htmlspecialchars()— échappe uniquement les cinq caractères HTML spéciaux (<,>,&,",').htmlspecialchars_decode()— inversehtmlspecialchars(); plus rapide quehtml_entity_decode()lorsque vous n'avez besoin de récupérer que ces cinq caractères.
html_entity_decode() gère l'ensemble complet des entités nommées, donc utilisez-la lorsque l'entrée peut contenir des entités comme © ou é ; utilisez htmlspecialchars_decode() lorsque vous n'avez produit de la sortie qu'avec htmlspecialchars().