web-dev-qa-db-fra.com

Supprimer toutes les balises HTML, sauf autorisées

J'ai vu beaucoup d'expressions pour supprimer une balise spécifique (ou de nombreuses balises spécifiées) et ne pour supprimer toutes les balises sauf une , mais je n'ai pas trouvé de moyen de supprimer tout sauf plusieurs exclus (c'est-à-dire tous sauf p, b, i, u, a, ul, ol, li) en PHP. Je suis loin d'être bon avec regex, donc j'aurais besoin d'un coup de main. :) Merci!

31
Lazlo

strip_tags() fait exactement cela.

51
Rufinus

vous pouvez le faire en utilisant strip_tags fonction

strip_tags - Supprime les balises HTML et PHP d'une chaîne

 strip_tags($contant,'tag you want to allow');

comme

  strip_tags($contant,'<code><p>');
48
NullPoiиteя

Si vous avez besoin d'une certaine flexibilité, vous pouvez utiliser une solution basée sur des expressions rationnelles et en tirer parti. strip_tags comme indiqué ci-dessus devrait toujours être l'approche privilégiée.

Les éléments suivants suppriment uniquement les balises que vous spécifiez (liste noire):

// tags separated by vertical bar
$strip_tags = "a|strong|em";

// target html
$html = '<em><b>ha<a href="" title="">d</a>f</em></b>';

// Regex is loose and works for closing/opening tags across multiple lines and
// is case-insensitive

$clean_html = preg_replace("#<\s*\/?(".$strip_tags.")\s*[^>]*?>#im", '', $html);

// prints "<b>hadf</b>";
echo $clean_html;
6
aleemb