2013-07-24 3 views
1

Я читаю содержание html. Есть изображения теги, такие какRegex extract image ссылки

<img onclick="document.location='http://abc.com'" src="http://a.com/e.jpg" onload="javascript:if(this.width>250) this.width=250"> 

или

<img src="http://a.com/e.jpg" onclick="document.location='http://abc.com'" onload="javascript:if(this.width>250) this.width=250" /> 

Я пытался переформатировать эти метки, чтобы стать

<img src="http://a.com/e.jpg" /> 

Однако я не являюсь успешным. Коды, которые я пытался построить до сих пор, похожи на

$image=preg_replace('/<img(.*?)(\/)?>/','',$image); 

Любой может помочь?

+0

Это не задача для регулярных выражений. Вместо этого используйте парсер HTML. –

ответ

1

Вот версия с использованием DOMDocument, которая удаляет все атрибуты из <img> тегов для src кроме атрибут. Обратите внимание, что выполнение loadHTML и saveHTML с DOMDocument может также изменять другой html, особенно если этот html искажен. Поэтому будьте осторожны - проверьте и посмотрите, приемлемы ли результаты.

<?php 

$html = <<<ENDHTML 
<!doctype html> 
<html><body> 
<a href="#"><img onclick="..." src="http://a.com/e.jpg" onload="..."></a> 

<div><p> 
<img src="http://a.com/e.jpg" onclick="..." onload="..." /> 
</p></div> 
</body></html> 
ENDHTML; 

$dom = new DOMDocument; 
if (!$dom->loadHTML($html)) { 
    throw new Exception('could not load html'); 
} 

$xpath = new DOMXPath($dom); 

foreach ($xpath->query('//img') as $img) { 
    // unfortunately, cannot removeAttribute() directly inside 
    // the loop, as this breaks the attributes iterator. 
    $remove = array(); 
    foreach ($img->attributes as $attr) { 
     if (strcasecmp($attr->name, 'src') != 0) { 
      $remove[] = $attr->name; 
     } 
    } 

    foreach ($remove as $attr) { 
     $img->removeAttribute($attr); 
    } 
} 

echo $dom->saveHTML(); 
0

Матч один на один раз, то CONCAT строки, я не уверен, какой язык вы используете так плохо объясняют в псевдо:

1.Find <img with regex place match in a string variable 
2.Find src="..." with src=".*?" place match in a string variable 
3.Find the end /> with \/> place match in a string variable 
4.Concat the variables together