У меня есть сайт, на котором я получаю описание продуктов из базы данных и декодирую 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?






Я думаю, это может быть то, что вы ищете:
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']);