Em PHP, como posso usar a class DOMDocument para replace o atributo src = de uma tag IMG?

Muitas vezes, é útil poder trocar o src = atributo de uma tag HTML IMG sem perder nenhum dos outros atributos. Qual é a maneira rápida e não regex de fazer isso?

As razões pelas quais eu não quero usar o RegEx são:

  1. Não é muito legível. Eu não quero passar 20 minutos decifrando um padrão sempre que preciso relatar um novo caso.
  2. Estou planejando modificar esta function para adicionar atributos de largura e altura quando faltam. Uma simples substituição de seqüência RegEx não será fácil de modificar para este propósito.

Aqui está o contexto: Tenho um monte de mensagens de feed RSS que cada uma contém uma imagem. Gostaria de replace essas imagens por imagens em branco, mas mantenha o HTML inalterado de outra forma:

$raw_post_html = "

Feed Example

Feed Post Image Feed Body Content

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

É isso que eu encontrei. Ele usa a API PHP DOM para criar um pequeno documento HTML e, em seguida, salva o XML apenas para o 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 : nas versões do PHP antes de 5.3.6, $doc->saveHTML($tag) pode ser alterado para $doc->saveXML($tag) .