PHP: удалить определенный тег из HTML-строки?
У меня есть следующий html:
<html>
<body>
bla bla bla bla
<div id="myDiv">
more text
<div id="anotherDiv">
And even more text
</div>
</div>
bla bla bla
</body>
</html>
Я хочу удалить все, начиная с <div id="anotherDiv"> до его закрытия <div>. Как мне это сделать?
8 ответов:
$dom = new DOMDocument; $dom->loadHTML($htmlString); $xPath = new DOMXPath($dom); $nodes = $xPath->query('//*[@id="anotherDiv"]'); if($nodes->item(0)) { $nodes->item(0)->parentNode->removeChild($nodes->item(0)); } echo $dom->saveHTML();
Вы можете использовать
preg_replace()как:$string = preg_replace('/<div id="someid"[^>]+\>/i', "", $string);
В дополнение к ответу Хаима Евги, используя
preg_replace():Функция
function strip_single_tag($str,$tag){ $str=preg_replace('/<'.$tag.'[^>]*>/i', '', $str); $str=preg_replace('/<\/'.$tag.'>/i', '', $str); return $str; }Edit
Для обработки
strip_single_tag('<pre>abc</pre>','p');function strip_single_tag($str,$tag){ $str1=preg_replace('/<\/'.$tag.'>/i', '', $str); if($str1 != $str){ $str=preg_replace('/<'.$tag.'[^>]*>/i', '', $str1); } return $str; }Ресурсы
Вы также можете использовать простой HTML DOM для этого.
Синтаксический анализатор HTML DOM, написанный на PHP5+, позволяет очень легко манипулировать HTML путь!
Хорошо сказано drpcken
Предположим, что у вас есть
$title = "управление записями";
Тогда вы можете использовать его как strip_tags ($title,'title');
Он вернет вам просто Управление постами
Я написал их, чтобы удалить определенные теги и атрибуты. Поскольку они являются регулярными, они не на 100% гарантированно работают во всех случаях, но для меня это был справедливый компромисс:
// Strips only the given tags in the given HTML string. function strip_tags_blacklist($html, $tags) { foreach ($tags as $tag) { $regex = '#<\s*' . $tag . '[^>]*>.*?<\s*/\s*'. $tag . '>#msi'; $html = preg_replace($regex, '', $html); } return $html; } // Strips the given attributes found in the given HTML string. function strip_attributes($html, $atts) { foreach ($atts as $att) { $regex = '#\b' . $att . '\b(\s*=\s*[\'"][^\'"]*[\'"])?(?=[^<]*>)#msi'; $html = preg_replace($regex, '', $html); } return $html; }
Как насчет этого?
// Strips only the given tags in the given HTML string. function strip_tags_blacklist($html, $tags) { $html = preg_replace('/<'. $tags .'\b[^>]*>(.*?)<\/'. $tags .'>/is', "", $html); return $html; }
Comments