Я пытаюсь добавить HTML ко всем ссылкам, содержащим изображение.
Базовый HTML-код, загруженный в dom, выглядит следующим образом:
<div class='content'>
<a href="..."><img src=""></a>
<figure>
<a href="..."><img src=""></a>
<figcaption>Caption</figcaption>
</figure>
</div>
Код:
$content = mb_convert_encoding($content, 'HTML-ENTITIES', "UTF-8");
$dom = new DOMDocument();
@$dom->loadHTML($content);
// Convert Images
$images = [];
foreach ($dom->getElementsByTagName('img') as $node) {
$images[] = $node;
}
foreach ($images as $node) {
$field_html = $dom->createDocumentFragment(); // create fragment
$field_html->appendXML('<span>11</span>'); // create fragment
$node->parentNode->appendChild($field_html);
}
$newHtml = preg_replace('/^<!DOCTYPE.+?>/', '', str_replace( array('<html>', '</html>', '<body>', '</body>'), array('', '', '', ''), $dom->saveHTML()));
return $newHtml;
Так что, когда это обычная ссылка с img, он выдает правильный вывод:
<a href="..."><img src=""><span>11</span></a>
Но когда это цифра, вывод очень странный - ссылка дублируется и вставляется в figcaption
:
<figure>
<a href="..."><img src=""></a>
<figcaption>Caption <a href="..."><span>11</span>
</figcaption>
</figure>
Это потому, что DOMDocument не делаетпонимаете figure
вещь?