Ответ 1
$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();
У меня есть следующий 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 = 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);
Вы также можете использовать Простой HTML DOM.
Анализатор HTML DOM, написанный на PHP5 +, позволяет вам манипулировать HTML очень легко путь!
В дополнение к Haim Evgi ответьте с помощью 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;
}
Ресурсы
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;
}