Как распарить текстовое поле с картинками и вывести ссылки на картинки отдельно?

Olga93

Новичок
Здравствуйте, у меня есть таблица в которой размещены несколько записей, в них присутствует группа картинок. Подскажите как распарсить эти картинки и вывести их пути отдельно. Вот как выглядит запись в таблице (в поле text).
Описание статьи
<div class="image_group">
<div class="image1"><img src="http://site.ru/files/image/1135051920/1.jpg"/></div>
<div class="image2"><img src="http://site.ru/files/image/1245377922/2.jpg"/></div>
<div class="image3"><img src="http://site.ru/files/image/1725283924/3.jpg"/></div>
<div class="image4"><img src="http://site.ru/files/image/1815032920/4.jpg"/></div>
</div>
Полученные пути нужно разместить в одну из ячейку<table>, которая обозначена, таким текстом в коде “------------IMG-------------- ”.
Код находится в самом низу этого поста.
Те картинки которые изначально выгружались в качестве тега рекомендуется убрать, чтобы они не отображались при выводе.
Вот код.
PHP:
<?php
//config.php
define('HOST','localhost');
define('USER','root');
define('PASS','');
define('DBNAME','site');
header("Content-Type: text/html; charset=utf-8");
$email = "[email protected]"
try {
    $dbh = new PDO("mysql:host=".HOST.";dbname=".DBNAME."",USER,PASS);
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $dbh -> exec("SET NAMES UTF8");
    header("Content-Type: text/html; charset=utf-8");
}
catch(PDOException $e) {
  echo "Обнаружена ошибка. Напишите администратору. $email<br>";
  file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}

?>

<?php
//index.php
include "config.php";
try {
         $query = "SELECT id, title, date, text FROM data";
         $STH = $dbh->prepare($query);
         $STH->execute();
      
}
catch(PDOException $e) {
       echo "1 Обнаружена ошибка. Напишите администратору. $email<br>";
      file_put_contents('PDOErrors.txt', $e->getMessage(), FILE_APPEND);
}
      
        $items = $STH->fetchAll(PDO::FETCH_ASSOC);
        foreach($items as $item)
        {
          echo '<table border="1" cellspacing=0><tr><td>'.$item["title"].'</td></tr><tr><td>'.$item["text"].'</td></tr>
<tr><td>------------IMG--------------</td></tr></table>';
      
        }
?>
P.S. Прочитала, что это можно сделать как-то с помощью регулярных выражений.
 

Valick

Новичок
Надо единожды нормализовать данные в БД и спать спокойно, а не костылить регулярки "на выходе".
 

Olga93

Новичок
Предположим у меня есть статьи с картинками. Картинки размещены в отдельной папке, если статья становится уже не актуальной, то её следует удалить, соответственно, картинки также следует удалить для экономии места и чтобы не захламлять папки ненужными картинками. Поэтому мне нужно распарсить текст и вынуть от туда image, чтобы потом применить над ними unlink.
 

AmdY

Пью пиво
Команда форума
Прикреплённые картинки можно хранить в отдельной таблице. Вы же как-то их аплодите.
Плюс картинки могут использоваться в других статьях и не мешало бы ещё и счётчик иметь.
 

Тугай

Новичок
регуляркой можно, но судя по твоему коду у тебя в базе url, для этого есть готовая функциия parse_url
Код:
var_dump(parse_url('http://site.ru/files/image/1135051920/1.jpg'));

array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(7) "site.ru"
  ["path"]=>
  string(29) "/files/image/1135051920/1.jpg"
}
 

AmdY

Пью пиво
Команда форума
регуляркой можно, но судя по твоему коду у тебя в базе url, для этого есть готовая функциия parse_url
Код:
var_dump(parse_url('http://site.ru/files/image/1135051920/1.jpg'));

array(3) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(7) "site.ru"
  ["path"]=>
  string(29) "/files/image/1135051920/1.jpg"
}
вы задачу прочитайте. у него сохранена простыня текста в которой ссылки на картинки. parse_url здесь точно не к месту.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
На сколько я помню, мы тут вопросы парсинга вообще не обсуждаем
 

Valick

Новичок
Кодекс, так тож про воровство речь, а тут из своей бд достать. Я лишь предложил это сделать один раз и не мучатся, но ТС упрямая как пробка.
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Кодекс, так тож про воровство речь, а тут из своей бд достать. Я лишь предложил это сделать один раз и не мучатся, но ТС упрямая как пробка.
О том и речь, человек просто не понимает как сделать нормально хранение картинок и статей, а помогать это парсить - услуга прям так себе.
 

Olga93

Новичок
Нашла подходящую статью в интернете, как это делается вот ссылка.
Извлечение данных с помощью регулярных выражений PHP
Здесь как раз подходящий пример под номером 6 “Src из тегов img”. Но он почему-то парсит только одну картинку, поэтому вот другой вариант.
PHP:
$html = 'text <img alt="" src="/img.png"> text <img alt="" src="/img2.png"> text <img alt="" src="/img3.png">
text <img alt="" src="/img4.png">';

preg_match_all('/<img(.*?)src=("|\'|)(.*?)("|\'| )(.*?)>/s', $html, $images);


foreach ($images[3] as $img) {
  echo '<br>'.$img."<br>";
 
}
 

AmdY

Пью пиво
Команда форума
Нашла подходящую статью в интернете, как это делается вот ссылка.
Извлечение данных с помощью регулярных выражений PHP
Здесь как раз подходящий пример под номером 6 “Src из тегов img”. Но он почему-то парсит только одну картинку, поэтому вот другой вариант.
PHP:
$html = 'text <img alt="" src="/img.png"> text <img alt="" src="/img2.png"> text <img alt="" src="/img3.png">
text <img alt="" src="/img4.png">';

preg_match_all('/<img(.*?)src=("|\'|)(.*?)("|\'| )(.*?)>/s', $html, $images);


foreach ($images[3] as $img) {
  echo '<br>'.$img."<br>";

}
А как вы будете бороться с тем что картинка в другой статье используется. Или прописана через стили. Или используется как фон?
 

Olga93

Новичок
А как вы будете бороться с тем что картинка в другой статье используется. Или прописана через стили. Или используется как фон?
Мы же обсуждаем здесь как вынуть картинки из статьи. Много ли существует статей где картинки подгружаются через стили. Я лично перечитала в интернете большое количество статей и не разу не видела, чтобы кто-то подгружал их через стили. Да и при том что значит если картинки находятся в "другой статье". У меня одноразовые картинки, для одной статьи одни картинки для другой другие. Если есть предположение что помимо картинок статьи получу другое изображение, то здесь данные будут обрабатываться только из БД поля под название text, где находится только статья с картинками, никаких посторонних изображений.
 
Последнее редактирование:

Olga93

Новичок
WMix, полезная бибиотека, спасибо.
PHP:
<?php
include('simple_html_dom.php');
 
$html = '<div class = "image_group">text <img alt="" src="/img.png"> text <img alt="" src="/img2.png"> text <img alt="" src="/img3.png"> text <img alt="" src="/img4.png"></div>';
$html = str_get_html ($html);
$images = $html->find('.image_group img');
foreach($images as $image) {
    echo "<br>".$image->getAttribute('src');
}
?>
Посмотрела примеры она даже ссылки с google может парсить, а с постраничной навигацие (пагинацией) работает?
 

WMix

герр M:)ller
Партнер клуба
а с постраничной навигацие (пагинацией) работает?
какая разница как это называется, до тех пор пока можно описать selector?
смотри стуктуру и описывай
PHP:
$html->find('#padination a');
она даже ссылки с google может парсить
я воспользовался бы API, а не парсил бы.
 
Последнее редактирование:
Сверху