Kuvien poistaminen DOMDocumentilla
Olen kirjoittanut DOMDocumentista muutamissa muissa viesteissä (1, 2, 3 jakaaksesi muutaman), mutta pidän sitä edelleen hyödyllisenä eri tavoin.
Muista, että DOMDocument on PHP:n luokka, jonka avulla voimme käsitellä HTML-asiakirjaa ennen sen renderöimistä selaimessa.
Edustaa koko HTML- tai XML-asiakirjaa; toimii dokumenttipuun juurena.
Aina kun ajattelen työskenteleväni saveHTMLtoiminnon kanssa, ajattelen, että uudet tiedot on sarjoitava tiedostoon tai muuhun tulostevirtaan ennen sen lähettämistä selaimeen.
Mutta meidän ei tarvitse tehdä sitä. Se voidaan tehdä muistissa.
Esimerkki: Projektissa minun on löydettävä kaikki asiakirjan kuvaelementit. Jos kuvalla ei ole kelvollista lähde-URL-osoitetta, minun on joko korvattava lähdeattribuutti tai poistettava se.
Tässä esimerkissä oletetaan seuraavaa
isValidImageon funktio, jonka tehtävänä on tarkistaa, onko määritetty lähdeattribuutti kelvollinen URL-osoite,- että asetan
srcattribuutin tyhjäksi merkkijonoksi paikkamerkkikuvan sijaan, jotta koodi pysyy yksinkertaisena, - Ja palautan tuloksen mihin tahansa malliin tai osittaiseen malliin.
Olen kommentoinut koodia, joten sen pitäisi olla tarpeeksi helppo seurata tässä esimerkissä:
<?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();
Huomaa, että yllä olevaa koodia voidaan parantaa useilla tavoilla (kuten palauttaminen aikaisin, jos kuvia ei löydy), mutta tarkoituksena on näyttää, kuinka srcattribuutti korvataan, jos URL-osoite ei ratkaise oikein. Siten kuvien poistaminen DOMDocumentilla.
Jos olet kiinnostunut URL-osoitteen kelvollisuuden määrittämisestä, tästä artikkelista voi olla apua.
