W3docs

strip_tags()

La fonction strip_tags() en PHP supprime les balises HTML et PHP d'une chaîne, ne laissant que le contenu texte brut.

Introduction

La fonction strip_tags() en PHP supprime les balises HTML, XML et PHP d'une chaîne, ne laissant que le contenu texte brut. Elle est couramment utilisée pour transformer du contenu soumis par un utilisateur ou du texte enrichi en texte propre sans balises — par exemple, lors de la génération d'un court résumé, d'un corps d'e-mail en texte brut, ou d'une version sécurisée d'un commentaire à stocker.

Cet article couvre la syntaxe, les paramètres obligatoires et facultatifs, des exemples pratiques, la forme tableau ajoutée dans PHP 7.4, ainsi que les mises en garde de sécurité importantes à comprendre avant de s'y fier.

Comprendre la fonction strip_tags()

La fonction strip_tags() analyse la chaîne d'entrée et supprime tout ce qui ressemble à une balise HTML/XML (le texte entre < et >) ainsi que les balises PHP (<?php ... ?>). Le texte situé entre les balises est conservé. La syntaxe est la suivante :

La syntaxe PHP de strip_tags()

strip_tags(string $string, array|string|null $allowed_tags = null): string

Voici ce que fait chaque paramètre :

  • $string — la chaîne d'entrée dont les balises doivent être supprimées. C'est le seul paramètre obligatoire.
  • $allowed_tags (facultatif) — une liste de balises qui ne doivent pas être supprimées. Vous pouvez la passer sous forme de chaîne de noms de balises ("<a><b>") ou, depuis PHP 7.4, sous forme de tableau (["a", "b"]). Lorsqu'elle est omise (ou null), toutes les balises sont supprimées.

La fonction retourne la chaîne résultante avec toutes les balises non autorisées supprimées. Elle ne modifie jamais la chaîne d'origine.

Attention : les commentaires (<!-- ... -->) et les blocs <?php ... ?> sont toujours supprimés et ne peuvent pas être ajoutés à la liste d'autorisation.

Exemple d'utilisation

Voyons un exemple pour comprendre l'utilisation de la fonction strip_tags() en PHP :

Exemple de strip_tags() en PHP

php— editable, runs on the server

Dans l'exemple ci-dessus, nous utilisons la fonction strip_tags() pour supprimer toutes les balises HTML et PHP de la chaîne. La chaîne résultante Hello WorldThis is a paragraph. est ensuite affichée à l'écran à l'aide de l'instruction echo.

Utilisation du paramètre $allowable_tags

Voyons un autre exemple pour comprendre comment le paramètre $allowable_tags peut être utilisé avec la fonction strip_tags() :

Comment utiliser strip_tags() en PHP ?

php— editable, runs on the server

Dans l'exemple ci-dessus, nous utilisons la fonction strip_tags() pour supprimer les balises HTML et PHP de la chaîne. Nous spécifions la balise <a> comme balise autorisée à l'aide du paramètre $allowed_tags. En conséquence, la fonction supprime les balises <h1> et <p> mais préserve leur contenu textuel, tout en conservant la balise <a> et son contenu intacts. La chaîne résultante Hello WorldThis is a paragraph.<a href='https://www.example.com'>Example link</a> est ensuite affichée à l'écran à l'aide de l'instruction echo.

Passer les balises autorisées sous forme de tableau (PHP 7.4+)

Depuis PHP 7.4, vous pouvez passer les balises autorisées sous forme de tableau au lieu d'une chaîne. C'est plus facile à lire et moins sujet aux erreurs que la construction d'une chaîne de style "<a><b>" :

<?php

$str = "<p>Hi</p><b>bold</b><i>italic</i>";

// String form (any PHP version)
echo strip_tags($str, "<p><b>"); // <p>Hi</p><b>bold</b>italic

echo "\n";

// Array form (PHP 7.4 and newer) — equivalent result
echo strip_tags($str, ["p", "b"]); // <p>Hi</p><b>bold</b>italic

Les deux appels conservent les balises <p> et <b> et suppriment la balise <i>, affichant <p>Hi</p><b>bold</b>italic sur chaque ligne.

Remarque : strip_tags() ne valide pas le HTML. Elle supprime simplement les balises en fonction de la liste d'autorisation fournie, ce qui peut laisser un balisage mal formé ou des balises non fermées dans la sortie.

Sécurité : strip_tags() ne suffit pas pour arrêter les attaques XSS

Une idée reçue courante est que strip_tags() rend les entrées utilisateur sûres à afficher. Ce n'est pas le cas. La fonction ne supprime que les balises entières — elle ne pas assainit les attributs des balises que vous autorisez :

<?php

$input = '<a href="javascript:alert(1)" onclick="steal()">click me</a>';

// The <a> tag survives, attributes and all
echo strip_tags($input, "<a>");
// <a href="javascript:alert(1)" onclick="steal()">click me</a>

Les attributs href et onclick dangereux passent directement. Pour du contenu qui sera rendu en HTML, utilisez htmlspecialchars() pour échapper le texte, ou un assainisseur HTML dédié comme HTML Purifier lorsque vous avez besoin d'autoriser un certain balisage en toute sécurité. Utilisez strip_tags() pour produire du texte brut, et non pour produire du HTML sécurisé.

Cas d'utilisation courants

  • Aperçus en texte brut : générer un extrait sans balises d'un article pour les résultats de recherche ou les vues de liste.
  • Corps d'e-mails en texte brut : supprimer le HTML avant d'envoyer l'alternative texte d'un e-mail.
  • Nettoyage des entrées utilisateur qui ne doivent jamais contenir de balisage, comme un nom d'affichage ou une requête de recherche.

Fonctions associées

  • htmlspecialchars() — échappe <, >, & et les guillemets afin que le balisage s'affiche en texte au lieu d'être supprimé.
  • htmlentities() — convertit tous les caractères applicables en entités HTML.
  • trim() — supprime les espaces environnants, souvent associé à strip_tags() pour nettoyer le résultat.

Conclusion

La fonction strip_tags() est un outil simple pour extraire du texte brut à partir de chaînes contenant du balisage HTML ou PHP. Passez une liste d'autorisation (sous forme de chaîne, ou de tableau depuis PHP 7.4+) lorsque vous avez besoin de conserver des balises spécifiques, et rappelez-vous qu'elle ne supprime que les balises — elle n'assainit pas les attributs, elle ne remplace donc pas un échappement de sortie approprié. Utilisez-la pour produire du texte brut, et faites appel à htmlspecialchars() ou à un vrai assainisseur lorsque vous avez besoin de HTML sécurisé.

Pratique

Pratique
Quel est le but de la fonction strip_tags() en PHP ?
Quel est le but de la fonction strip_tags() en PHP ?
Was this page helpful?