可能重复:
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>');
接下来我该怎么做?
答案 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>
当然,您需要修改标签/属性/值名称以满足您的特定需求。