Intereting Posts
PHP – как определить, если выходная буферизация включена Стоит ли использовать Doctrine 2 с Zend Framework? Доступ к типу varray, определенному внутри пакета, с помощью oci_new_collection отправлять данные с php на javascript Ошибка 1148 MySQL Использованная команда не допускается с этой версией MySQL PHP socket_write работает в первый раз, но Массив PHP для массива postgres Пользовательский запрос $ wpdb в WordPress по настраиваемому полю ldap_add (): Добавить: сервер не желает выполнять Остановить кеширование для PHP 5.5.3 в MAMP Комментирование системы на сообщениях с использованием ajax и php Как предотвратить прямой доступ / скачивание в mp3 / wav-файлы, позволяя флеш-плееру получить к ним доступ с помощью .htaccess (или PHP) Как объединить два массива путем суммирования объединенных значений Symfony 2 и пользовательские переменные сеанса из унаследованного приложения Проблемы с PHP 5.3 и папками сеансов

Получить 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 первого. Это возможно?

Используйте парсер 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")); 

Вам лучше было бы использовать парсер 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 

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

 $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's within the html string print_r($origImageSrc); 

Я знаю, что люди говорят, что вы не должны использовать регулярные выражения для синтаксического анализа 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); 
 $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 такой как DOMDocument и NOT regex.

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

Могут быть два простых решения:

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