В PHP, как я могу использовать класс DOMDocument для замены атрибута src = тега IMG?

Часто бывает полезно изменить атрибут src = HTML IMG-тега без потери каких-либо других атрибутов. Что такое быстрый, не-регулярный способ сделать это?

Причины, по которым я не хочу использовать RegEx, следующие:

  1. Это не очень читаемо. Я не хочу тратить 20 минут на дешифрование шаблона каждый раз, когда мне нужно учитывать новый случай.
  2. Я планирую изменить эту функцию, чтобы добавить атрибуты ширины и высоты, когда они отсутствуют. Простую замену строки RegEx для этой цели нелегко изменить.

Вот контекст: у меня есть куча сообщений RSS-фида, каждая из которых содержит одно изображение. Я хотел бы заменить эти изображения пустыми изображениями, но не оставлять HTML в противном случае:

$raw_post_html = "<h2>Feed Example</h2> <p class='feedBody'> <img src='http://img.ruphp.com/php/48da8425bc54af2d5d022f28cc8b021c.200.0.0.png' alt='Feed Post Image' width='350' height='200' /> Feed Body Content </p>"; echo replace_img_src($raw_post_html, "http://img.ruphp.com/php/blank.gif"); 

Это то, что я придумал. Он использует PHP DOM API для создания крошечного документа HTML, а затем сохраняет XML только для элемента 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; } 

Примечание . В версиях PHP до 5.3.6 $doc->saveHTML($tag) можно изменить на $doc->saveXML($tag) .