Подтвердить что ты не робот

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>. Как это сделать?

4b9b3361

Ответ 1

С native 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();

Ответ 2

Вы можете использовать preg_replace() как:

$string = preg_replace('/<div id="someid"[^>]+\>/i', "", $string);

Ответ 3

Вы также можете использовать Простой HTML DOM.

Анализатор HTML DOM, написанный на PHP5 +, позволяет вам манипулировать HTML очень легко путь!

Ответ 4

В дополнение к 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;
}

Ресурсы

https://gist.github.com/rafasashi/59c9448f5467ea427fa3

Ответ 6

Хорошо сказано drpcken

Предположим, что у вас есть

$title= "Управление сообщениями";

Затем вы можете использовать его как strip_tags ($ title, 'title');

Он вернет вам просто "Управление сообщениями"

Ответ 7

Я написал их для разметки определенных тегов и атрибутов. Поскольку они являются регулярными выражениями, они не гарантируются на 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;
}

Ответ 8

как насчет этого?

// 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;
}