4

It's often useful to be able to swap out the src= attribute of an HTML IMG tag without losing any of the other attributes. What's a quick, non-regex way of doing this?

The reasons I don't want to use RegEx are:

  1. It's not very readable. I don't want to spend 20 mins deciphering a pattern every time I need to account for a new case.
  2. I am planning on modifying this function to add in width and height attributes when they're missing. A simple RegEx string replacement won't be easy to modify for this purpose.

Here's the context: I have a bunch of RSS feed posts that each contain one image. I would like to replace these images with blank images, but keep the HTML otherwise unaffected:

$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");
4

1 回答 1

13

这就是我想出的。它使用 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;
}

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

于 2013-06-20T17:53:29.453 回答