Подтвердить что ты не робот

Получить img src с помощью PHP

Я хотел бы получить атрибут SRC в переменной в этом примере:

<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />

Так, например, я хотел бы получить переменную $foo = "/images/image.jpg". Важный! Атрибут src будет динамическим, поэтому он не должен быть жестко запрограммирован. Есть ли быстрый и простой способ сделать это?

Спасибо!

EDIT: изображение будет частью огромной строки, которая в основном является содержанием новостной истории. Таким образом, изображение является лишь частью этого.

EDIT2: в этой строке будет больше изображений, и я бы хотел получить только src первого. Возможно ли это?

4b9b3361

Ответ 1

Используйте парсер HTML, например DOMDocument, а затем оцените значение, которое вы ищете, с помощью DOMXpath:

$html = '<img id="12" border="0" src="/images/image.jpg"
         alt="Image" width="100" height="100" />';

$doc = new DOMDocument();
$doc->loadHTML($html);
$xpath = new DOMXPath($doc);
$src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"

Или для тех, кому действительно нужно экономить место:

$xpath = new DOMXPath(@DOMDocument::loadHTML($html));
$src = $xpath->evaluate("string(//img/@src)");

И для однострочных там:

$src = (string) reset(simplexml_import_dom(DOMDocument::loadHTML($html))->xpath("//img/@src"));

Ответ 2

Вам лучше было бы использовать парсер DOM для такого разбора HTML-анализа. Рассмотрим этот код:

$html = '<img id="12" border="0" src="/images/image.jpg"
         alt="Image" width="100" height="100" />';
$doc = new DOMDocument();
libxml_use_internal_errors(true);
$doc->loadHTML($html); // loads your html
$xpath = new DOMXPath($doc);
$nodelist = $xpath->query("//img"); // find your image
$node = $nodelist->item(0); // gets the 1st image
$value = $node->attributes->getNamedItem('src')->nodeValue;
echo "src=$value\n"; // prints src of image

ВЫВОД:

src=/images/image.jpg

Ответ 3

Я сделал это более простым способом, не таким чистым, как должен, но это был быстрый хак

$htmlContent = file_get_contents('pageURL');

// read all image tags into an array
preg_match_all('/<img[^>]+>/i',$htmlContent, $imgTags); 

for ($i = 0; $i < count($imgTags[0]); $i++) {
  // get the source string
  preg_match('/src="([^"]+)/i',$imgTags[0][$i], $imgage);

  // remove opening 'src=' tag, can`t get the regex right
  $origImageSrc[] = str_ireplace( 'src="', '',  $imgage[0]);
}
// will output all your img src within the html string
print_r($origImageSrc);

Ответ 4

Я знаю, что люди говорят, что вы не должны использовать регулярные выражения для синтаксического анализа HTML, но в этом случае я считаю, что это прекрасно.

$string = '<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />';
preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $string, $result);
$foo = array_pop($result);

Ответ 5

$imgTag = <<< LOB
<img border="0" src="/images/image.jpg" alt="Image" width="100" height="100" />
<img border="0" src="/images/not_match_image.jpg" alt="Image" width="100" height="100" />
LOB;

preg_match('%<img.*?src=["\'](.*?)["\'].*?/>%i', $imgTag, $matches);
$imgSrc = $matches[1];

DEMO


ПРИМЕЧАНИЕ.. Вы должны использовать HTML-парсер, например, DOMDocument и NOT регулярное выражение.

Ответ 6

$str = '<img border="0" src=\'/images/image.jpg\' alt="Image" width="100" height="100"/>';

preg_match('/(src=["\'](.*?)["\'])/', $str, $match);  //find src="X" or src='X'
$split = preg_split('/["\']/', $match[0]); // split by quotes

$src = $split[1]; // X between quotes

echo $src;

Другое регулярное выражение может использоваться для определения того, является ли вытащенный тэг src таким же образом:

if(preg_match('/([jpg]{3}$)|([gif]{3}$)|([jpeg]{3}$)|([bmp]{3}$)|([png]{3}$)/', $src) == 1) {
//its an image
}

Ответ 7

Возможны два простых решения:

  • HTML он сам является xml, поэтому вы можете использовать любой метод разбора XML, если вы загружаете тег как XML и получаете его атрибут tottally динамически даже атрибут dom data (например, время данных или что-то еще).....
  • Использовать любой html-парсер для php как http://mbe.ro/2009/06/21/php-html-to-array-working-one/ или php parse html для массива Google this