strip_tags () черный список, а не белый список

Недавно я обнаружил strip_tags() которая берет строку и список принятых html-тегов в качестве параметров.

Скажем, я хотел избавиться от изображений в строке, вот пример:

 $html = '<img src="example.png">'; $html = '<p><strong>This should be bold</strong></p>'; $html .= '<p>This is awesome</p>'; $html .= '<strong>This should be bold</strong>'; echo strip_tags($html,"<p>"); 

возвращает это:

 <p>This should be bold</p> <p>This is awesome</p> This should be bold 

следовательно, я избавился от своего форматирования через <strong> и, возможно, <em> в будущем.

Мне нужен черный список, а не белый список:

 echo blacklist_tags($html,"<img>"); 

возвращения:

 <p><strong>This should be bold<strong></p> <p>This is awesome</p> <strong>This should be bold<strong> 

Есть какой-либо способ сделать это?

Если вы хотите удалить теги <img> , вы можете использовать DOMDocument вместо strip_tags() .

 $dom = new DOMDocument(); $dom->loadHTML($your_html_string); // Find all the <img> tags $imgs = $dom->getElementsByTagName("img"); // And remove them $imgs_remove = array(); foreach ($imgs as $img) { $imgs_remove[] = $img; } foreach ($imgs_remove as $i) { $i->parentNode->removeChild($i); } $output = $dom->saveHTML(); 

Вы можете сделать это, написав пользовательскую функцию. Strip_tags () считается более безопасным, хотя, потому что вы можете забыть черный список некоторых тегов …

PS: Некоторые примеры функций можно найти в комментариях на странице strip_tags () php.net