PHP заменяет изображение src и добавляет новый атрибут в тег изображения из строки, содержащей разные теги html

У меня есть сайт, на котором я получаю описание продуктов из базы данных и декодирую html, как это в PHP, и отображаю его на интерфейсе веб-страницы:

$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');

Он возвращает html, как показано ниже:

<div class = "container">
 <div class = "textleft">
  <p>
   <span style = "font-size:medium">
    <strong>Product Name:</strong>
   </span>
   <br />
   <span style = "font-size:14px">Some description here <a href = "some-link">Click here to see full details.</a></span>
   </p>
 </div>
 <div class = "imageblock">
  <a href = "some-link">
   <img src = "http://myproject.com/image/catalog/image1.jpg" style = "width: 500px; height: 150px;" />
  </a>
 </div>
 <div style = "clear:both">
</div>
<div class = "container">
 <div class = "textleft">
  <p>
   <span style = "font-size:medium">
    <strong>Product Name:</strong>
   </span>
   <br />
   <span style = "font-size:14px">Some description here <a href = "some-link">Click here to see full details.</a></span>
   </p>
 </div>
 <div class = "imageblock">
  <a href = "some-link">
   <img src = "http://myproject.com/image/catalog/image2.jpg" style = "width: 500px; height: 150px;" />
  </a>
 </div>
 <div style = "clear:both">
</div>

В описании товара может быть много изображений. Я добавил только 2 в моем примере. Что мне нужно сделать, так это заменить src каждого изображения на src = "image/catalog/blank.gif" для всех изображений и добавить новый атрибут.

data-src = "http://myproject.com/image/catalog/image1.jpg" 

для изображения 1 и

data-src = "http://myproject.com/image/catalog/image2.jpg"

для изображения 2. атрибут data-src должен получить исходное значение src для каждого изображения. Как я могу этого добиться? Я пробовал preg_replace следующим образом

$data['description'] = preg_replace('((\n)?src = "\b.*?")', 'src = "image/catalog/blank.gif', $data['description']);

Он заменяет атрибут src каждого изображения, но как я могу добавить data-src с исходным путем к изображению. Мне нужно это перед загрузкой страницы, так есть ли способ сделать это с помощью PHP?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
1
1 921
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Я думаю, это может быть то, что вы ищете:

http://php.net/manual/en/domdocument.getelementsbytagname.php

$data['description'] = html_entity_decode($product_info['description'], ENT_QUOTES, 'UTF-8');

$doc = new DOMDocument();
$doc->loadHTML($data['description']);
$tags = $doc->getElementsByTagName('img');
foreach ($tags as $tag) {
    $old_src = $tag->getAttribute('src');
    $new_src_url = 'image/catalog/blank.gif';
    $tag->setAttribute('src', $new_src_url);
    $tag->setAttribute('data-src', $old_src);
}
$data['description'] = $doc->saveHTML();

Я не проверял это, так что не копируйте и не вставляйте.

Ответ принят как подходящий

Просто настройте регулярное выражение. Захватите текст, который вы хотите использовать (круглые скобки), затем сошлитесь на эту группу 1, используя $1 или \1.

preg_replace('(src = "(.*?)")', 'src = "image/catalog/blank.gif" data-src = "$1"', $data['description']);

Демо: https://repl.it/repls/SpottedZanyОбсуждение

Другие вопросы по теме