Возникает необходимость вытащить с какой-нибудь страницы HTML какой-нибудь тэг или класс. На помощь может прийти стандартный HTML-класс DOMDocument
$dom = new DOMDocument; $dom->loadHTML($html); $images = $dom->getElementsByTagName('img'); foreach ($images as $image) { $image->setAttribute('src', 'http://example.com/' . $image->getAttribute('src')); } $html = $dom->saveHTML();
Но работает он крайне нестабильно, хотя бы по причине того, что не совсем корректно отрабатывает, если в дереве тэги закрыты не все.
Поэтому можно воспользоваться достаточно простой для использования библиотеки Simple HTML DOM
Эта библиотека позволяет парсить страницу используя многим привычные jQuery-селекторы. Эта библиотека умеет фильтровать элементы, искать вложенные и обращаться к их атрибутам, а также она адекватно работает с не совсем корректным HTML-кодом и проблемы с кодировкой у неё особых нет.
Мне нужно было найти все изображения на странице и вывести их на экран, код для подобного есть в примерах на сайте, поэтому тут все просто
$html = str_get_html($url); $images = $html->find('img'); foreach ($images as $image) { echo '<img src='.$image-src.'>'; }
Вот пример от создателей. В этом примере сначала подгружается, а потом модифицируется заранее заготовленный HTML-код: во второй строке происходит добавление атрибута class со значением bar первом попавшемуся элементу div, а в следующей строке мы заменяем текст элемента с id=”world” на foo.
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>'); $html->find('div', 1)->class = 'bar'; $html->find('div[id=hello]', 0)->innertext = 'foo'; echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>