[php] Get img src with PHP
I would like to get the SRC attribute into a variable in this example:
So for example — I would like to get a variable $foo = «/images/image.jpg» . Important! The src attribute will be dynamic, so it mustn’t be hardcoded. Is there any quick and easy way to do this?
EDIT: The image will be a part of a huge string that is basically the content of a news story. So the image is just a part of that.
EDIT2: There will be more images in this string, and I would only want to get the src of the first one. Is this possible?
This question is related to php html image variables src
The answer is
Use a HTML parser like DOMDocument and then evaluate the value you’re looking for with DOMXpath :
$html = ' '; $doc = new DOMDocument(); $doc->loadHTML($html); $xpath = new DOMXPath($doc); $src = $xpath->evaluate("string(//img/@src)"); # "/images/image.jpg"
Or for those who really need to save space:
$xpath = new DOMXPath(@DOMDocument::loadHTML($html)); $src = $xpath->evaluate("string(//img/@src)");
And for the one-liners out there:
$src = (string) reset(simplexml_import_dom(DOMDocument::loadHTML($html))->xpath("//img/@src"));
You would be better off using a DOM parser for this kind of HTML parsing. Consider this code:
$html = ' '; $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
I have done that the more simple way, not as clean as it should be but it was a quick hack
$htmlContent = file_get_contents('pageURL'); // read all image tags into an array preg_match_all('/]+>/i',$htmlContent, $imgTags); for ($i = 0; $i < count($imgTags[0]); $i++) < // get the source string preg_match('/src="https://syntaxfix.com/question/27269/([%5E"]+)/i',$imgTags[0][$i], $imgage); // remove opening 'src=' tag, can`t get the regex right $origImageSrc[] = str_ireplace( 'src qstn_body"> I know people say you shouldn't use regular expressions to parse HTML, but in this case I find it perfectly fine.
$string = ' '; preg_match('/
NOTE: You should use an HTML Parser like DOMDocument and NOT a regex.
$str = ''; preg_match('/(src=["\'](.*?)["\'])/', $str, $match); //find src="https://syntaxfix.com/question/27269/X" or src='X' $split = preg_split('/["\']/', $match[0]); // split by quotes $src = $split[1]; // X between quotes echo $src;
Other regexp's can be used to determine if the pulled src tag is a picture like so:
if(preg_match('/([jpg]$)|([gif]$)|([jpeg]$)|([bmp]$)|([png]$)/', $src) == 1) < //its an image >
There could be two easy solutions:
- HTML it self is an xml so you can use any XML parsing method if u load the tag as XML and get its attribute tottally dynamically even dom data attribute (like data-time or anything).
- Use any html parser for php like http://mbe.ro/2009/06/21/php-html-to-array-working-one/ or php parse html to array Google this
Как извлечь img src, title и alt из html с помощью php?
Я хотел бы создать страницу, где все изображения, которые находятся на моем сайте, перечислены с заголовком и альтернативным представлением. Я уже написал мне небольшую программу для поиска и загрузки всех HTML файлов, но теперь я застрял в том, как извлечь src , title и alt из этого HTML:
Я предполагаю, что это должно быть сделано с некоторым регулярным выражением, но поскольку порядок тегов может отличаться, и мне все они нужны, я действительно не знаю, как это разбираться элегантным способом (я мог бы сделать это жесткий char способом char, но это больно).
21 ответ
EDIT: теперь, когда я лучше знаю
Использование regexp для решения этой проблемы - плохая идея и, вероятно, приведет к недостижимому и ненадежному коду. Лучше использовать парсер HTML.
Решение С regexp
В этом случае лучше разбить процесс на две части:
Я предполагаю, что ваш документ не является строгим xHTML, поэтому вы не можете использовать синтаксический анализатор XML. НАПРИМЕР. с этим исходным кодом веб-страницы:
/* preg_match_all match the regexp in all the $html string and output everything as an array in $result. "i" option is used to make it case insensitive */ preg_match_all('/]+>/i',$html, $result); print_r($result); Array ( [0] => Array ( [0] => [1] => [2] => [3] => [4] => [. ] ) )
Затем мы получаем все атрибуты тега img с помощью цикла:
$img = array(); foreach( $result as $img_tag) < preg_match_all('/(alt|title|src)=("[^"]*")/i',$img_tag, $img[$img_tag]); >print_r($img); Array ( [ ] => Array ( [0] => Array ( [0] => src="/Content/Img/stackoverflow-logo-250.png" [1] => alt="logo link to homepage" ) [1] => Array ( [0] => src [1] => alt ) [2] => Array ( [0] => "/Content/Img/stackoverflow-logo-250.png" [1] => "logo link to homepage" ) ) [] => Array ( [0] => Array ( [0] => src="https://overcoder.net/content/img/vote-arrow-up.png" [1] => alt="vote up" [2] => title="This was helpful (click again to undo)" ) [1] => Array ( [0] => src [1] => alt [2] => title ) [2] => Array ( [0] => "/content/img/vote-arrow-up.png" [1] => "vote up" [2] => "This was helpful (click again to undo)" ) ) [] => Array ( [0] => Array ( [0] => src="https://overcoder.net/content/img/vote-arrow-down.png" [1] => alt="vote down" [2] => title="This was not helpful (click again to undo)" ) [1] => Array ( [0] => src [1] => alt [2] => title ) [2] => Array ( [0] => "/content/img/vote-arrow-down.png" [1] => "vote down" [2] => "This was not helpful (click again to undo)" ) ) [] => Array ( [0] => Array ( [0] => src="http://www.gravatar.com/avatar/df299babc56f0a79678e567e87a09c31?s=32&d=identicon&r=PG" [1] => alt="gravatar image" ) [1] => Array ( [0] => src [1] => alt ) [2] => Array ( [0] => "http://www.gravatar.com/avatar/df299babc56f0a79678e567e87a09c31?s=32&d=identicon&r=PG" [1] => "gravatar image" ) ) [..] ) )
Regexps имеют интенсивность процессора, поэтому вам может понадобиться кэшировать эту страницу. Если у вас нет системы кэширования, вы можете настроить свою собственную, используя ob_start и загрузку/сохранение из текстового файла.
Как работает этот материал?
Сначала мы используем preg_ match_ all, функцию, которая получает каждую строку, соответствующую шаблону, и выводит ее в третий параметр.
Мы применяем его на всех веб-страницах html. Его можно прочитать, поскольку каждая строка, начинающаяся с " " char и заканчивается нa > .
Мы применяем его последовательно на каждом теге img. Он может быть прочитан как каждая строка, начинающаяся с "alt", "title" или "src", затем "=", затем "," куча вещей, которые не являются "и заканчивается символом" ", Изолировать подстроки между().
Наконец, каждый раз, когда вы хотите иметь дело с регулярными выражениями, удобно иметь хорошие инструменты для быстрого тестирования. Проверьте этот онлайн-тестер регулярных выражений.
EDIT: ответьте на первый комментарий.
Это правда, что я не думал о (надеюсь, несколько) людей, использующих одинарные кавычки.
Ну, если вы используете только ', просто замените все на.
Если вы смешиваете оба. Сначала вы должны пощекотать себя:-), затем попытайтесь использовать ( "|" ) вместо или "и [^ ø], чтобы заменить [^" ].
Единственная проблема - одиночные кавычки: не будет работать, регулярное выражение ожидает "все время"
Я НЕ рекомендовал бы прокручивать вниз (хорошо, сделайте прокрутку, чтобы проверить это): хотя код кажется простым и поэтому заманчивым для использования людьми, DOMDocument имеет слишком много накладных расходов, когда вы просто хотите получить атрибуты из тега. ..
Это решение хорошо, если: вы не знаете тег для анализа html, у вас есть 1 строка html и вам нужно 1-2 атрибута. Загрузка DOMDoc требует много памяти, что бесполезно, если вы не анализируете весь документ.
Найти img src (PHP)
Например у нас есть файл test.html и нужно найти все атрибуты src у изображений.
test.html
!DOCTYPE> preg_image.php
Скрипт preg_image.php будет брать текст файла test.html и искать изображения.
]*>/i', $content, $images, PREG_SET_ORDER); foreach ($images as $image) < echo $image[1] . '
'; >?php>
Результат
В результате выполнения скрипта preg_images.php , на экран будет выдан следующий результат:
Категории
Читайте также
- Удалить все атрибуты кроме (PHP)
- Проверка электронной почты (PHP)
- Удалить двойные пробелы (PHP)
- Удалить все атрибуты у тегов (PHP)
- Вырезать все кроме цифр (PHP)
- preg_replace и русские буквы
- Поменять img.src (jQuery)
- Как поменять изображение (JavaScript)
- Найти и удалить элемент массива (PHP)
- Наложение логотипа (PHP)
- Удалить все теги (PHP)
- Узнать цвет пикселя изображения (PHP)
Получить URL (src) изображения по ID
Здравствуйте!
Подскажите пожалуйста решение, сколько не искал, так и не смог найти того что мне нужно.
В общем, есть код в котором различные теги, ссылки и изображения. Мне нужно вытащить из общего кода только URL на определенное изображение. Например по ID, есть код картинки:
img src="images/photo.jpg" id="mainimg">
Получить src изображения
Здравствуйте. Есть такой код: var poster = HD.DocumentNode.SelectSingleNode("//div/img/@src");.
Регулярные выражения - вытащить src из заданного url страницы
Приветствую! Подскажите пожалуста как решить заданную задачу: имеется адрес страницы(сервер.
Замена изображения src в css
Здравствуйте. Мне нужно заменить одни шахматные фигуры на другие на одном сайте через расширение.
var mainimg = document.getElementById("mainimg"); var src = mainimg.getAttribute("src");
Сообщение от Пифагор
var mainimg = document.getElementById("mainimg"); var src = mainimg.getAttribute("src");
$img='; if (preg_match_all('/, $img, $m)) { echo $m[1][0]; }
Сообщение было отмечено Kerry_Jr как решение
Решение
Да, решение "идеальное", а главное "удобное"
Не лучше ли воспользоваться встроенными функциями? Для этого их и создали..
$htmlDoc = new DOMDocument(); $htmlDoc->loadHTMLFile('имя файл'); //поправил $searchNode = $htmlDoc->getElementById('mainimg'); $valueSrc = $searchNode->getAttribute('src');
Сообщение от Пифагор
$htmlDoc->loadHTMLFile('имя файла');
Как указать src изображения из переменной во Vue.js?
Здраствуйте. Я пытаюсь вывести значение в тег img с переменной vue Вот код: <template> .
Src получить корневой элемент
При запросе: alert(document.getElementById("ibbunner").src); Получаю результат.
Как из asp получить полный URL и часть URL от вопросительного знака?
Господа подскажите как из asp получить полный URL и часть URL от вопросительного знака. На.
Как получить часть url return url
как получить часть url return url Привет всем! Вопрос от человека далекого от javaScript. у меня.
На основе исходного изображения (A) и отфильтрованного фильтром гаусса (B), получить изображения
Подскажите ,запутался немного в bmp файлах. Использовать GraphABS запрещено! На основе исходного.