En PHP, ¿cómo puedo usar la clase DOMDocument para reemplazar el atributo src = de una etiqueta IMG?

A menudo es útil poder cambiar el atributo src = de una etiqueta HTML IMG sin perder ninguno de los otros atributos. ¿Qué es una forma rápida y no regex de hacer esto?

Las razones por las que no quiero usar RegEx son:

  1. No es muy legible No quiero pasar 20 minutos descifrando un patrón cada vez que necesito dar cuenta de un nuevo caso.
  2. Estoy planeando modificar esta función para agregar atributos de ancho y alto cuando faltan. Una simple sustitución de cadena RegEx no será fácil de modificar para este fin.

Aquí está el contexto: tengo un montón de publicaciones de fonts RSS que contienen una imagen. Me gustaría reemplazar estas imágenes con imágenes en blanco, pero de todos modos no se verá afectado el HTML:

$raw_post_html = "

Feed Example

Feed Post Image Feed Body Content

"; echo replace_img_src($raw_post_html, "http://cdn.company.org/blank.gif");

Esto es lo que se me ocurrió. Utiliza la API PHP DOM para crear un pequeño documento HTML y luego guarda el XML solo para el elemento IMG.

 function replace_img_src($original_img_tag, $new_src_url) { $doc = new DOMDocument(); $doc->loadHTML($original_img_tag); $tags = $doc->getElementsByTagName('img'); if(count($tags) > 0) { $tag = $tags->item(0); $tag->setAttribute('src', $new_src_url); return $doc->saveHTML($tag); } return false; } 

Nota : en versiones de PHP anteriores a 5.3.6, $doc->saveHTML($tag) puede cambiarse a $doc->saveXML($tag) .