У меня есть этот HTML в моей базе данных:Как удалить определенный элемент DOM с PHP DOMDocument
<p>some text 1</p>
<img src=\"http://www.example.com/images/some_image_1.jpg\">
<p>some text 2</p>
<p>some text 3</p>
<img src=\"http://www.example.com/images/some_image_2.jpg\">
<p>some text 4</p>
<p>some text 5</p>
<img src=\"http://www.example.com/images/some_image_3.jpg\">
Условно, мне нужно, чтобы удалить некоторые конкретные <img>
тег. Поэтому я не хочу удалять все теги <img>
, но только конкретные.
Я попытался это, но он будет удалять все <img>
тегов, даже если я не хочу, чтобы:
$dom = new \DOMDocument;
$dom->preserveWhiteSpace = false;
$dom->loadHTML($html);
$nodes = $dom->getElementsByTagName("img");
for($i = 0; $i < $nodes->length; $i++) {
if ($i == 1) {
continue;
}
$image = $nodes->item($i);
$image->parentNode->removeChild($image);
}
return $dom->saveHTML();
Может кто-нибудь помочь мне с этим? В этом примере html скажем, что я хочу удалить первое и третье изображение в тексте, но оставить второй.
Кроме того, я заметил, что метод saveHTML()
добавляет теги <html><body>
к моему html, и я не хочу этого. Я не вижу возможности отключить это. Любая помощь там тоже?
Заранее спасибо, я застрял с этим в течение нескольких часов.
По какой-либо причине ваш код сохранит второе и третье изображение. Я нашел способ заставить его работать. Внутри цикла for я создаю массив удаляемых изображений. Затем в дополнительном цикле foreach я просматриваю этот массив и удаляю изображения. – offline
Да, второе изображение будет оставаться выше в коде, но не третьим. Поэтому вам нужно убедиться, что 2 не добавлен в этот массив. '$ stillImages = array (1);' –
Он не работает должным образом. Посмотрите здесь: http://phpfiddle.org/main/code/rkim-st8w, запустите код. – offline