Як видалити зображення за допомогою DOMDocument
Я писав про DOMDocument у кількох інших публікаціях (1, 2, 3, щоб поділитися кількома), але я продовжую вважати його корисним різними способами.
Пам’ятайте, що DOMDocument — це клас у PHP, який дозволяє нам маніпулювати HTML-документом перед його відтворенням у браузері.
Представляє весь документ HTML або XML; служить коренем дерева документа.
Кожного разу, коли я думаю про роботу з цією saveHTMLфункцією, я думаю про необхідність серіалізувати нову інформацію у файл або інший вихідний потік перед тим, як надсилати її в браузер.
Але ми не повинні цього робити. Це можна зробити на пам’ять.
Приклад: у проекті мені потрібно знайти всі елементи зображення в документі. Якщо зображення не має дійсної URL-адреси джерела, мені потрібно або замінити атрибут джерела, або видалити його.
Для цілей цього прикладу припустимо наступне
isValidImageце функція, яка відповідає за перевірку того, чи вказаний атрибут джерела розв’язує дійсну URL-адресу,- Що я встановлюю
srcатрибут як порожній рядок, а не як зображення-заповнювач, щоб код був простим, - І я повертаю результат до того, що буде відображено в шаблоні або частковому.
Я прокоментував код, тому його має бути досить легко наслідувати для цього прикладу:
<?php
// Instantiate a DOMDocument object and load the incoming $description HTML.
$domDocument = new DOMDocument();
$domContent = $domDocument->loadHTML(mb_convert_encoding($description, 'HTML-ENTITIES'));
// Find all of the images in the HTML.
$images = $domDocument->getElementsByTagName('img');
// If there are images, then iterate through each of them.
if (0 !== count($images)) {
$urlPrefix = $this->getUrlPrefix(); // A helper function for getting the URL prefix.
foreach ($images as $image) {
$image->setAttribute(
'src',
$urlPrefix.$image->getAttribute('src')
);
// If the image's source results in a 404 status code, set the `src` to an empty string.
if (!$this->isValidImage($image->getAttribute('src'))) {
$image->setAttribute('src', '');
}
}
}
// Save the changed document and send it to the front-end.
return $domDocument->saveHTML();
Зауважте, що існує кілька способів покращення наведеного вище коду (наприклад, передчасне повернення, якщо не знайдено зображень), але мета полягає в тому, щоб показати, як замінити srcатрибут, якщо URL-адреса не вирішується належним чином. Таким чином, видалення зображень за допомогою DOMDocument.
Якщо вам цікаво, як визначити, чи URL-адреса дійсна, ця стаття може бути корисною.
