Функция PHP для разметки тегов, за исключением списка белых тегов и атрибутов

Мне нужно удалить все теги и атрибуты HTML из пользовательского ввода, кроме тех, которые считаются «безопасными» (т. Е. Подход белого списка).

strip_tags () удаляет все теги, кроме тех, которые перечислены в параметре $allowable_tags . Но мне также нужно уметь стирать все атрибуты, не включенные в белый список; например, я хочу разрешить <b> , но я не хочу разрешать атрибут onclick по понятным причинам.

Есть ли функция, чтобы сделать это, или я должен буду сделать свой собственный?

Solutions Collecting From Web of "Функция PHP для разметки тегов, за исключением списка белых тегов и атрибутов"

Насколько мне известно, решение strip_tags – это самый быстрый способ избавиться от нежелательных тегов и запретить сторонние пакеты, проверка допустимых атрибутов будет довольно простой в DOMDocument,

 $string = strip_tags($string,'<b>'); $dom = new DOMDocument(); $dom->loadHTML($string); $allowed_attributes = array('id'); foreach($dom->getElementsByTagName('*') as $node){ for($i = $node->attributes->length -1; $i >= 0; $i--){ $attribute = $node->attributes->item($i); if(!in_array($attribute->name,$allowed_attributes)) $node->removeAttributeNode($attribute); } } var_dump($dom->saveHTML()); 

Для этого нет никакой функции, поэтому вам, вероятно, придется написать ее. Возможно, регулярное выражение сделает трюк.