Автор Тема: preg* pattern за взимане на html между див таг  (Прочетена 358 пъти)

0 Потребители и 1 Гост преглежда(т) тази тема.

lqlqlq

  • Full Member
  • ***
  • Благодарности
  • -Казани: 30
  • -Получени: 1
  • Публикации: 234
Hi :)

Запецнах на едно място и се надявам, че тук ще ми помогнете.

Значи имам ето този html:


Код: HTML
  1. <div class="to_remove">
  2. <div class="box">
  3. <div class="boxhead">test</div>
  4.  1111111111111
  5.     11111111111111
  6. </div>
  7. </div>
  8. </div>

Като отгоре може да има още html и отдолу също.
Целта ми е да взема всичко между <div class="to_remove"></div>, тоест само това:
Код: HTML
  1. <div class="box">
  2. <div class="boxhead">test</div>
  3.  1111111111111
  4.     11111111111111
  5. </div>
  6. </div>

От няколко дни се мъча, но не става. Също така опцията да се изпозва DOM (http://php.net/manual/en/book.dom.php), отпада тъй като се използва file_get_contents и е пълна каша, то не е валиден html де, няма Doctype и т.н. Взима се само това по-горе + още малко излишен html.

Надявам се да има вариант с preg_replace или preg_match_all, за да може да си взема това между този клас to_remove.
« Последна редакция: 12 Юли 2016, 23:23:04 от Avalanche »

lqlqlq

  • Full Member
  • ***
  • Благодарности
  • -Казани: 30
  • -Получени: 1
  • Публикации: 234
Re: preg* pattern за взимане на html между див таг
« Отговор #1 -: 12 Юли 2016, 15:57:12 »
Оправих се и даже стана с DOM parser-a:
Код: PHP
  1.     $dom = new DOMDocument();
  2.     $dom->loadHTML(mb_convert_encoding($get_menus, 'HTML-ENTITIES', "UTF-8"), LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
  3.     $xpath = new DOMXPath($dom);
  4.     foreach ($xpath->query('//div[@class="to_remove"]') as $div) {
  5.         while ($div->hasChildNodes()) {
  6.             $child = $div->removeChild($div->firstChild);
  7.             $div->parentNode->insertBefore($child, $div);
  8.         }
  9.         $div->parentNode->removeChild($div);
  10.     }
  11.      $dom->saveHTML();
« Последна редакция: 12 Юли 2016, 23:22:50 от Avalanche »