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


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

Причины, по которым я не хочу использовать регулярное выражение:

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

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

$raw_post_html = "<h2>Feed Example</h2>
    <p class='feedBody'>
        <img src='http://premium.mofusecdn.com/6ff7098b3c8561d70c0af16d30e57d4e/cache/other/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://cdn.company.org/blank.gif");
1 3

1 ответ:

Вот что я придумал. Он использует 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).