✅ Noticias, temas, complementos de WEB y WordPress. Aquí compartimos consejos y las mejores soluciones para sitios web.

Cómo eliminar imágenes con DOMDocument

36

He escrito sobre DOMDocument en algunas otras publicaciones (1, 2, 3 para compartir algunas) pero sigo encontrándolo útil de diferentes maneras.

Recuerda, DOMDocument es una clase en PHP que nos permite manipular el documento HTML antes de mostrarlo en el navegador.

Del manual :

Representa un documento HTML o XML completo; sirve como la raíz del árbol del documento.

Cada vez que pienso en trabajar con la saveHTMLfunción, pienso en la necesidad de serializar la nueva información en un archivo u otro flujo de salida antes de enviarlo al navegador.

Pero no tenemos que hacer eso. Se puede hacer en la memoria.

Caso en cuestión: en un proyecto, necesito encontrar todos los elementos de imagen en un documento. Si la imagen no tiene una URL de origen válida, debo reemplazar el atributo de origen o eliminarlo.

Cómo eliminar imágenes con DOMDocument

Para los propósitos de este ejemplo, suponga lo siguiente

  • isValidImagees una función que es responsable de verificar si el atributo fuente especificado se resuelve en una URL válida,
  • Que estoy configurando el srcatributo en una cadena vacía en lugar de una imagen de marcador de posición para mantener el código simple,
  • Y devuelvo el resultado a lo que sea que se renderice en la plantilla o en el parcial.

He comentado el código, por lo que debería ser lo suficientemente fácil de seguir para este ejemplo:

<?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();

Tenga en cuenta que hay varias formas de mejorar el código anterior (como volver antes si no se encuentran imágenes), pero el propósito es mostrar cómo reemplazar el srcatributo si la URL no se resuelve correctamente. Por lo tanto, eliminar imágenes con DOMDocument.

Si está interesado en cómo determinar si una URL es válida, este artículo puede resultarle útil.

Fuente de grabación: tommcfarlin.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More