2010-09-27 3 views
1

Можно создать дубликат:
Dynamically replace the “src” attributes of all <img> tagsДинамически замените «SRC» атрибуты всех <img> тегов (перевождь)

Забавная история: Я отправил this very question некоторое время назад, но вместо того, чтобы что-то я мог, вы знаете, использовать, все, что у меня было, было много догм о зле использования регулярного выражения для анализа HTML. Итак, здесь идет снова.

У меня есть HTML и вы хотите заменить атрибуты «src» всех тегов img, чтобы они указывали на копии идентичных изображений (хотя и с разными именами файлов) на другом хосте.

Например, учитывая эти три метки

<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

Вы пробовали использовать DOMDocument()? – KeatsKelleher

+1

Голосование, чтобы закрыть как дубликат [Динамически заменить атрибуты src всех тегов] (http://stackoverflow.com/questions/3808285/dynamically-replace-the-src-attributes-of-all-img-tags), поскольку это не способ сделать это, но вы правы, ответы могут быть более точными (хотя проверка документации DOM не так уж трудна, и мне становится легче (субъективно) и быстрее (цель), затем «Простой HTML DOM Parser») – Wrikken

ответ

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

Если вы заботитесь пройти путь 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); 
} 
Смежные вопросы