PHP функция для удаления тегов, кроме списка белых тегов и атрибутов - PullRequest
3 голосов
/ 02 августа 2010

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

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

Есть ли функция для этого или мне придется сделать свою собственную?

Ответы [ 2 ]

13 голосов
/ 02 августа 2010

Насколько я знаю, решение 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());
0 голосов
/ 02 августа 2010

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

...