logo oujood
🔍

Fonction htmlentities() en PHP : Guide complet

Découvrez comment utiliser htmlentities() pour sécuriser vos affichages HTML et prévenir les failles XSS

OUJOOD.COM

Définition et usage de la fonction htmlentities()


PHP - Référence des fonctions de manipulation de chaînes

Versions PHP : PHP 4, PHP 5, PHP 7, PHP 8

htmlentities() — Convertit tous les caractères éligibles en entités HTML pour un affichage sécurisé

Description de htmlentities()

La fonction htmlentities() est similaire à la fonction htmlspecialchars(), mais avec une différence importante : elle convertit tous les caractères possédant un équivalent en entités HTML, et pas seulement les caractères spéciaux critiques (<, >, &, ", ').

Cette fonction est essentielle pour afficher du contenu utilisateur de manière sécurisée dans vos pages HTML et prévenir les attaques XSS (Cross-Site Scripting).

Pour réaliser l'opération inverse (décoder les entités HTML en caractères), utilisez la fonction html_entity_decode().

Syntaxe

htmlentities(string $string, int $flags = ENT_COMPAT, ?string $encoding = null, bool $double_encode = true): string

Paramètres

Paramètre Description
string Requis. La chaîne de caractères à convertir en entités HTML.
flags Facultatif. Définit le comportement de conversion des guillemets. Valeur par défaut : ENT_COMPAT
  • ENT_COMPAT - Convertit uniquement les guillemets doubles ("), ignore les guillemets simples (')
  • ENT_QUOTES - Convertit les guillemets doubles ET simples
  • ENT_NOQUOTES - Ne convertit aucun type de guillemet
  • ENT_IGNORE - Ignore les séquences d'octets invalides (à combiner avec | )
  • ENT_SUBSTITUTE - Remplace les séquences invalides par le caractère de remplacement Unicode
  • ENT_HTML5 - Traite le code comme HTML5
encoding Facultatif. Spécifie l'encodage de caractères à utiliser. Valeur par défaut : UTF-8 (depuis PHP 5.4.0)

Jeux de caractères supportés

Jeu de caractères Alias Description
UTF-8 - Unicode 8 bits multioctets, compatible ASCII (recommandé)
ISO-8859-1 ISO8859-1 Europe occidentale, Latin-1
ISO-8859-15 ISO8859-15 Europe occidentale, Latin-9 (avec symbole Euro €)
cp1252 Windows-1252, 1252 Windows Europe occidentale
cp866 ibm866, 866 Cyrillique DOS
cp1251 Windows-1251, win-1251, 1251 Cyrillique Windows
KOI8-R koi8-ru, koi8r Russe
BIG5 950 Chinois traditionnel (Taïwan)
GB2312 936 Chinois simplifié
BIG5-HKSCS - Big5 avec extensions Hong Kong
Shift_JIS SJIS, 932 Japonais
EUC-JP EUCJP Japonais
double_encode Facultatif. Si FALSE, les entités HTML existantes ne seront pas ré-encodées. Valeur par défaut : TRUE

⚠️ Note importante : Utilisez toujours UTF-8 comme encodage pour les applications modernes. Les encodages non reconnus seront remplacés par ISO-8859-1 par défaut.

Valeur de retour

Retourne la chaîne encodée. Si la chaîne d'entrée contient une séquence d'octets invalide dans l'encodage spécifié, une chaîne vide sera retournée (sauf si ENT_IGNORE ou ENT_SUBSTITUTE sont utilisés).


Exemples pratiques

Exemple 1 : Conversion basique avec gestion des guillemets

Exemple :    📋 Copier le code

<?php
$chaine = 'Un \'apostrophe\' en <strong>gras</strong>';

// Avec ENT_COMPAT (par défaut) : convertit uniquement les guillemets doubles
echo htmlentities($chaine);
echo "<br>";

// Avec ENT_QUOTES : convertit guillemets doubles ET simples
echo htmlentities($chaine, ENT_QUOTES);
?>

Résultat affiché dans le navigateur :

Un 'apostrophe' en <strong>gras</strong>
Un 'apostrophe' en <strong>gras</strong>

Code source HTML généré :

Un 'apostrophe' en &lt;strong&gt;gras&lt;/strong&gt;
<br>
Un &#039;apostrophe&#039; en &lt;strong&gt;gras&lt;/strong&gt;

Exemple 2 : Gestion des caractères invalides en UTF-8

Exemple :    📋 Copier le code

<?php
// Séquence d'octets invalide en UTF-8
$chaine = "\x8F!!!";

// Sans ENT_IGNORE : affiche une chaîne vide (caractère invalide)
echo htmlentities($chaine, ENT_QUOTES, "UTF-8");
echo "<br>";

// Avec ENT_IGNORE : ignore les caractères invalides et affiche le reste
echo htmlentities($chaine, ENT_QUOTES | ENT_IGNORE, "UTF-8");
?>

Résultat affiché dans le navigateur :

    [chaîne vide]
    !!!

Exemple 3 : Affichage sécurisé de contenu utilisateur

Exemple :    📋 Copier le code

<?php
// Simulation d'une entrée utilisateur potentiellement dangereuse
$commentaire_utilisateur = '<script>alert("XSS")</script>Bonjour!';

// Affichage sécurisé : le script ne sera pas exécuté
echo htmlentities($commentaire_utilisateur, ENT_QUOTES, 'UTF-8');
?>

Résultat affiché dans le navigateur :

<script>alert("XSS")</script>Bonjour!

💡 Conseil de sécurité : Utilisez toujours htmlentities() ou htmlspecialchars() lors de l'affichage de contenu provenant d'utilisateurs pour prévenir les attaques XSS.


Différence entre htmlentities() et htmlspecialchars()

  • htmlspecialchars() : Convertit uniquement les caractères spéciaux essentiels (<, >, &, ", ')
  • htmlentities() : Convertit TOUS les caractères ayant un équivalent HTML (é → &eacute;, € → &euro;, etc.)

Recommandation : Utilisez htmlspecialchars() pour la plupart des cas (plus performant). Réservez htmlentities() aux situations où vous devez encoder tous les caractères spéciaux.


Par carabde • Mis à jour le 30 Octobre 2025