Кто-нибудь знает, существует ли измененная функция strip_tags, где вы можете указать идентификатор тегов, которые нужно удалить, и, возможно, также указать, чтобы удалить ВСЕ ДАННЫЕ В ТЕГИ. Возьмем, к примеру:
<div id="one"> <div id="two"> bla bla bla </div> </div> Running: new_strip_tags($data, 'two', true);
Должен вернуться:
<div id="one"> </div>
Есть что-то в этом роде?
Это не совсем то, что делает strip_tags, оно разделяет теги, но оставляет содержимое. То, что вы хотите, это примерно так:
function remove_div_with_id($html, $id) { return preg_replace('/<div[^>]+id="'.preg_quote($id, '/').'"[^>]*>(.*?)<\/div>/s', '', $html); }
Обратите внимание, что это будет работать неправильно с вложенными тегами. Если вам это нужно, вы можете использовать представление DOM вашего HTML.
Для этого вы можете использовать DOMDocument и DOMXPath .
<?php $html = '<html><head><title>...</title></head><body> <div id="one"> <div id="two"> bla bla bla </div> </div> </body></html>'; $doc = new DOMDocument; $doc->preserveWhiteSpace = false; $doc->loadhtml($html); $xpath = new DOMXPath($doc); $ns = $xpath->query('//div[@id="two"]'); // there can be only one... but anyway foreach($ns as $node) { $node->parentNode->removeChild($node); } echo $doc->savehtml();