W3docs

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 &lt;, &amp; ou &copy;) 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ètreRequisDescription
$stringOuiLa chaîne d'entrée contenant les entités HTML à décoder.
$flagsNonUn masque de bits qui contrôle quels guillemets sont décodés et quel type de document est supposé.
$encodingNonL'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

php— editable, runs on the server

Les entités &lt; et &gt; 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 :

IndicateurDécode
ENT_COMPATLes guillemets doubles uniquement
ENT_QUOTESLes guillemets simples et doubles
ENT_NOQUOTESNi 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 (&#039; / &apos;) :

php— editable, runs on the server

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" :

php— editable, runs on the server

ENT_HTML5 permet à PHP de reconnaître l'ensemble complet des entités nommées HTML5, de sorte que &eacute; et &amp; 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() — inverse htmlspecialchars() ; plus rapide que html_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 &copy; ou &eacute; ; utilisez htmlspecialchars_decode() lorsque vous n'avez produit de la sortie qu'avec htmlspecialchars().

Pratique

Pratique
Que fait la fonction `html_entity_decode()` en PHP ?
Que fait la fonction `html_entity_decode()` en PHP ?
Was this page helpful?