У меня есть некоторый HTML, который содержит (среди прочего) p
-тэги и figure
-таги, которые содержат один img
-таг.
Для простоты я определю пример того, чтоможно найти в HTML здесь в переменной PHP:
$content = '<figure class="image image-style-align-left">
<img src="https://placekitten.com/g/200/300"></figure>
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>';
Я использую DOMDocument для получения $content
, и в этом примере я изменю атрибут src
всех img
-элементов вfigure
-элемент:
$dom = new DOMDocument();
libxml_use_internal_errors(true);
// this needs to be encoded otherwise special characters get messed up.
$domPart = mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8");
$dom->loadHTML($domPart, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
$domFigures = $dom->getElementsByTagName('figure');
foreach ($domFigures as $domFigure) {
$img = $domFigure->getElementsByTagName('img')[0];
if ($img) {
$img->setAttribute('src', "https://placekitten.com/g/400/500");
}
}
$result = $dom->saveHTML();
Результат:
<figure class="image image-style-align-left">
<img src="https://placekitten.com/g/400/500">
<p>Lorem ipsum dolor sit amet, consectetuer adipiscing elit.</p>
</figure>
Каким-то образом мой p
-элемент переместился в мой figure
-элемент. Почему это происходит и что я могу сделать, чтобы предотвратить это?
Live DEMO