动态替换所有<img/>标记的“src”属性(redux)

时间:2010-09-27 23:55:44

标签: php parsing dom

  

可能重复:
  Dynamically replace the “src” attributes of all <img> tags

有趣的故事:我在不久前发布了this very question,但是我得到的并不是得到我能用的东西,而是使用正则表达式来解析HTML的弊端。所以又来了。

我有一些HTML,想要替换所有img标签的“src”属性,以便它们指向另一台主机上相同图像的副本(尽管文件名不同)。

例如,给出这三个标签

<IMG SRC="../graphics/pumpkin.gif" ALT="pumpkin">
<IMG BORDER="5" SRC="redball.gif" ALT="*"> 
<img alt="cool image" src="http://www.crunch.com/pic.jpg"/>

我希望将它们替换为

<IMG SRC="http://myhost.com/cache/img001.gif" ALT="pumpkin">
<IMG BORDER="5" SRC="http://myhost.com/cache/img002.gif" ALT="*"> 
<img alt="cool image" src="http://myhost.com/cache/img003.jpg"/>

我正在尝试使用PHP Simple HTML DOM Parser,但我没有得到它。

include 'simple_html_dom.php';
$html = str_get_html('<html><body>
<IMG SRC="../graphics/pumpkin.gif" ALT="pumpkin">
<IMG BORDER="5" SRC="redball.gif" ALT="*"> 
<img alt="cool image" src="http://www.crunch.com/pic.jpg"/>
</body></html>');

接下来我该怎么做?

2 个答案:

答案 0 :(得分:6)

如果您想采用DOMDocument()的方式:

$dom=new DOMDocument();
$dom->loadHTML($your_html);
$imgs = $dom->getElementsByTagName("img");
foreach($imgs as $img){
    $alt = $img->getAttribute('alt');
    if ($alt == 'pumpkin'){
        $src = 'http://myhost.com/cache/img001.gif';    
    } else if ($alt== '*'){
        $src = 'http://myhost.com/cache/img002.gif';
    } else if ($alt== 'cool image'){
        $src = 'http://myhost.com/cache/img003.jpg';
    }
    $img->setAttribute( 'src' , $src );
}

答案 1 :(得分:1)

您发布的链接有答案:

// Create DOM from string
$html = str_get_html('<div id="hello">Hello</div><div id="world">World</div>');

$html->find('div', 1)->class = 'bar';

$html->find('div[id=hello]', 0)->innertext = 'foo';

echo $html; // Output: <div id="hello">foo</div><div id="world" class="bar">World</div>

当然,您需要修改标签/属性/值名称以满足您的特定需求。