2010-09-27 63 views
1

可能重复:
Dynamically replace the “src” attributes of all <img> tags动态替换所有<img>标签的“SRC”属性(终极版)

滑稽的故事:我张贴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

你有()尝试使用DOM文档? – KeatsKelleher 2010-09-28 00:00:49

+1

投票以重复关闭[动态替换所有标记的“src”属性](http://stackoverflow.com/questions/3808285/dynamically-replace-the-src-attributes-of-all-img-tags ),因为这不是做这件事的方法,但你说得对,答案可能更重要(尽管检查DOM文档并不困难,而且我觉得它更容易(主观),并且(目标),然后'简单的HTML DOM解析器') – Wrikken 2010-09-28 00:11:50

回答

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> 

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

6

如果你愿意去DOM文档()的方法:

$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); 
}