strip_tags
strip_tags($string, $allowed_tags)
Retire d’un texte les balises HTML, les commentaires et les balises PHP et renvoie le texte brut. Utile pour un résumé ou une description meta tirés du contenu HTML d’un article. Elle ne suffit pas à protéger la sortie contre les attaques XSS.
Paramètres
- $string – texte avec des balises.
- $allowed_tags – facultatif, balises qui doivent rester dans le texte. Elles s’écrivent sous forme de chaîne "<p><strong>", depuis PHP 7.4 aussi sous forme de tableau de noms.
Exemples
echo strip_tags("<p>Bonjour <strong>tout le monde</strong></p>"); // Bonjour tout le monde
// balises permises
echo strip_tags("<p>Bonjour <strong>tout le monde</strong></p>", "<strong>"); // Bonjour <strong>tout le monde</strong>
// depuis PHP 7.4, les balises permises peuvent être passées sous forme de tableau
echo strip_tags("<p>Bonjour <em>tout le monde</em><br></p>", array("em", "br")); // Bonjour <em>tout le monde</em><br>
// elle retire aussi les commentaires
echo strip_tags("Texte<!-- commentaire --> suite"); // Texte suite
// le contenu des balises style et script reste dans le texte
echo strip_tags("<style>p{color:red}</style>Texte<script>alert(1)</script>"); // p{color:red}Textealert(1)
// les balises disparaissent sans laisser de trace – les mots de paragraphes voisins se collent
echo strip_tags("<p>Premier</p><p>Second</p>"); // PremierSecond
echo trim(preg_replace('/\s+/', " ", strip_tags(str_replace("<", " <", "<p>Premier</p><p>Second</p>")))); // Premier Second
// la fonction prend le signe < d'un texte ordinaire pour le début d'une balise
echo strip_tags("x<5 et y>3"); // x3
// une balise permise garde tous ses attributs
echo strip_tags('<a href="#" onclick="alert(1)">Lien</a>', "<a>"); // <a href="#" onclick="alert(1)">Lien</a>
// résumé tiré d'un texte HTML
echo mb_substr(strip_tags("<p>Long <b>texte</b> sur les fonctions.</p>"), 0, 10) . "…"; // Long texte…
Points d’attention
- Elle ne protège pas du XSS. Une balise permise garde tous ses attributs, y compris onclick et les liens en javascript. Protégez le texte de la page avec htmlspecialchars() et, si les utilisateurs peuvent insérer du HTML, utilisez une bibliothèque faite pour cela (par exemple HTML Purifier).
- Seules les balises sont retirées. Le contenu des balises <script> et <style> reste dans le texte comme du texte ordinaire.
- La fonction prend le signe < d’un texte brut (« x<5 ») pour le début d’une balise et efface le texte qui suit jusqu’au prochain >. S’il n’y a pas de signe fermant, tout le reste du texte disparaît.
- Elle ne convertit pas les entités : <b> reste inchangé. html_entity_decode() les convertit en texte brut.
- Les balises disparaissent sans laisser de trace, la fin d’un paragraphe se colle donc au début du suivant. Avant de les retirer, insérez donc une espace devant les balises, comme dans l’exemple.
Fonctions associées :
htmlspecialchars()
nl2br()
preg_replace()