So entfernen Sie Bilder mit DOMDocument
Ich habe in einigen anderen Beiträgen (1, 2, 3, um ein paar zu teilen) über DOMDocument geschrieben, aber ich finde es weiterhin auf verschiedene Weise nützlich.
Denken Sie daran, dass DOMDocument eine Klasse in PHP ist, die es uns ermöglicht, das HTML-Dokument zu manipulieren, bevor es im Browser gerendert wird.
Stellt ein vollständiges HTML- oder XML-Dokument dar; dient als Wurzel des Dokumentbaums.
Immer wenn ich daran denke, mit der saveHTMLFunktion zu arbeiten, denke ich daran, die neuen Informationen in eine Datei oder einen anderen Ausgabestrom zu serialisieren, bevor sie an den Browser gesendet werden.
Aber das müssen wir nicht. Es kann im Speicher durchgeführt werden.
Ein typisches Beispiel: In einem Projekt muss ich alle Bildelemente in einem Dokument finden. Wenn das Bild keine gültige Quell-URL hat, muss ich das Quellattribut entweder ersetzen oder entfernen.
Nehmen Sie für die Zwecke dieses Beispiels Folgendes an
isValidImageist eine Funktion, die dafür verantwortlich ist, zu prüfen, ob das angegebene Quellattribut in eine gültige URL aufgelöst wird,- Dass ich das
srcAttribut auf eine leere Zeichenfolge anstatt auf ein Platzhalterbild setze, um den Code einfach zu halten, - Und ich gebe das Ergebnis an das zurück, was in der Vorlage oder im Partial gerendert wird.
Ich habe den Code kommentiert, so dass es einfach genug sein sollte, diesem Beispiel zu folgen:
<?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();
Beachten Sie, dass es mehrere Möglichkeiten gibt, den obigen Code zu verbessern (z. B. vorzeitiges Zurückkehren, wenn keine Bilder gefunden werden), aber der Zweck besteht darin, zu zeigen, wie das srcAttribut ersetzt wird, wenn die URL nicht richtig aufgelöst wird. Entfernen Sie also Bilder mit DOMDocument.
Wenn Sie wissen möchten, wie Sie feststellen können, ob eine URL gültig ist, kann dieser Artikel hilfreich sein.
