У меня есть следующий 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>
. Как мне это сделать?
С родным DOM
$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);
Вы также можете использовать Simple HTML DOM для этого.
Парсер HTML DOM, написанный на PHP5 +, позволяет вам легко манипулировать HTML!
В дополнение к ответу Хаима Евги, используя preg_replace()
:
функция
function strip_single_tag($str,$tag){ $str=preg_replace('/<'.$tag.'[^>]*>/i', '', $str); $str=preg_replace('/<\/'.$tag.'>/i', '', $str); return $str; }
редактировать
для обработки 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; }
Ресурсы
Функция strip_tags () – это то, что вы ищете.
Хорошо сказано, 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; }