在PHP中,如何使用DOMDocument类替换IMG标记的src =属性?

Dav*_*idH 3 html php image src domdocument

能够在不丢失任何其他属性的情况下替换HTML IMG标记的src =属性通常很有用.这样做的快速,非正则表达方式是什么?

我不想使用RegEx的原因是:

  1. 它不是很易读.每次我需要考虑一个新案例时,我不想花费20分钟来破译模式.
  2. 我打算修改这个函数,以便在它们丢失时添加宽度和高度属性.为此目的,简单的RegEx字符串替换将不容易修改.

上下文是:我有一堆RSS feed帖子,每个帖子都包含一个图片.我想用空白图像替换这些图像,但保持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");
Run Code Online (Sandbox Code Playgroud)

Dav*_*idH 11

这就是我想出来的.它使用PHP DOM API创建一个小的HTML文档,然后仅为IMG元素保存XML.

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;
}
Run Code Online (Sandbox Code Playgroud)

注意:在5.3.6之前的PHP版本中,$doc->saveHTML($tag)可以更改为$doc->saveXML($tag).

  • @DaveChen:实际上dom使用字符串方法 (4认同)