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

  • Автор темы Автор темы Olga93
  • Дата начала Дата начала

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. Прочитала, что это можно сделать как-то с помощью регулярных выражений.
 
Надо единожды нормализовать данные в БД и спать спокойно, а не костылить регулярки "на выходе".
 
Предположим у меня есть статьи с картинками. Картинки размещены в отдельной папке, если статья становится уже не актуальной, то её следует удалить, соответственно, картинки также следует удалить для экономии места и чтобы не захламлять папки ненужными картинками. Поэтому мне нужно распарсить текст и вынуть от туда image, чтобы потом применить над ними unlink.
 
Прикреплённые картинки можно хранить в отдельной таблице. Вы же как-то их аплодите.
Плюс картинки могут использоваться в других статьях и не мешало бы ещё и счётчик иметь.
 
регуляркой можно, но судя по твоему коду у тебя в базе 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"
}
 
регуляркой можно, но судя по твоему коду у тебя в базе 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 здесь точно не к месту.
 
На сколько я помню, мы тут вопросы парсинга вообще не обсуждаем
 
Кодекс, так тож про воровство речь, а тут из своей бд достать. Я лишь предложил это сделать один раз и не мучатся, но ТС упрямая как пробка.
 
Кодекс, так тож про воровство речь, а тут из своей бд достать. Я лишь предложил это сделать один раз и не мучатся, но ТС упрямая как пробка.
О том и речь, человек просто не понимает как сделать нормально хранение картинок и статей, а помогать это парсить - услуга прям так себе.
 
Нашла подходящую статью в интернете, как это делается вот ссылка.
Извлечение данных с помощью регулярных выражений 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>";
 
}
 
Нашла подходящую статью в интернете, как это делается вот ссылка.
Извлечение данных с помощью регулярных выражений 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>";

}
А как вы будете бороться с тем что картинка в другой статье используется. Или прописана через стили. Или используется как фон?
 
А как вы будете бороться с тем что картинка в другой статье используется. Или прописана через стили. Или используется как фон?
Мы же обсуждаем здесь как вынуть картинки из статьи. Много ли существует статей где картинки подгружаются через стили. Я лично перечитала в интернете большое количество статей и не разу не видела, чтобы кто-то подгружал их через стили. Да и при том что значит если картинки находятся в "другой статье". У меня одноразовые картинки, для одной статьи одни картинки для другой другие. Если есть предположение что помимо картинок статьи получу другое изображение, то здесь данные будут обрабатываться только из БД поля под название text, где находится только статья с картинками, никаких посторонних изображений.
 
Последнее редактирование:
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 может парсить, а с постраничной навигацие (пагинацией) работает?
 
а с постраничной навигацие (пагинацией) работает?
какая разница как это называется, до тех пор пока можно описать selector?
смотри стуктуру и описывай
PHP:
$html->find('#padination a');

она даже ссылки с google может парсить
я воспользовался бы API, а не парсил бы.
 
Последнее редактирование:
Сверху