Come rimuovere le immagini con DOMDocument
Ho scritto di DOMDocument in alcuni altri post (1, 2, 3 per condividerne alcuni) ma continuo a trovarlo utile in diversi modi.
Ricorda, DOMDocument è una classe in PHP che ci consente di manipolare il documento HTML prima di visualizzarlo nel browser.
Rappresenta un intero documento HTML o XML; funge da radice dell’albero dei documenti.
Ogni volta che penso di lavorare con la saveHTMLfunzione, penso di dover serializzare le nuove informazioni in un file o in un altro flusso di output prima di inviarlo al browser.
Ma non dobbiamo farlo. Si può fare a memoria.
Caso in questione: in un progetto, ho bisogno di trovare tutti gli elementi dell’immagine in un documento. Se l’immagine non ha un URL di origine valido, è necessario sostituire l’attributo di origine o rimuoverlo.
Ai fini di questo esempio, si supponga quanto segue
isValidImageè una funzione responsabile del controllo per vedere se l’attributo di origine specificato si risolve in un URL valido,- Che sto impostando l’
srcattributo su una stringa vuota anziché su un’immagine segnaposto per mantenere il codice semplice, - E restituisco il risultato a tutto ciò che verrà visualizzato nel modello o nel parziale.
Ho commentato il codice, quindi dovrebbe essere abbastanza facile da seguire per questo esempio:
<?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();
Si noti che ci sono diversi modi in cui il codice sopra può essere migliorato (come restituire in anticipo se non vengono trovate immagini), ma lo scopo è mostrare come sostituire l’ srcattributo se l’URL non viene risolto correttamente. Pertanto, rimuovendo le immagini con DOMDocument.
Se sei interessato a come determinare se un URL è valido, questo articolo potrebbe essere utile.
