Dikkiy
@Dikkiy

Найти в тексте изображения с определенным классом, получить альт, src, и преобразовать в ссылку?

В тексте встречаются изображения с классом "popup-img" или "popup-img left"

<img src="http://example/img/product/name/thumbs/100/img.jpg" 
alt="описание фото" width="100" height="100" caption="false" class="popup-img left" />


нужно преобразовать их в

<a class="popup-img left" href="../img/product/name/img.jpg" 
title="описание фото" 
style="background: url('../img/product/name/thumbs/100/img.jpg');
-webkit-background-size: cover;background-size: cover;">
</a>


директории "thumbs/100", и "img" постоянны, остальное меняется.

пытаюсь делать так

$content = preg_replace('!<img src="http://(.*?)/thumbs/100/(.*?)" alt="(.*?)" width(.*?)height(.*?)caption(.*?)class(.*?)\s\/>!si','
<a class="popup-img left" href="../\\1\\2" 
title="\\3" 
style="background: url("../\\1/thumbs/100/\\2");
-webkit-background-size: cover;background-size: cover;">
</a>'.,$content);


\\1 не работает так как бы хотелось, если ее убрать, то остальные выдают как надо

Я только учусь помогите пожалуйста решить этот вопрос
В идеале нужно находить и заменять картинки с этим классом независимо от того, указаны ли у нее другие атрибуты.
  • Вопрос задан
  • 68 просмотров
Решения вопроса 1
@dodo512
https://3v4l.org/Cai40
$dom = new DOMDocument();
$dom->loadHTML($html);

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//img[contains(@class, "popup-img")]');

foreach($nodes as $node) {
   $a = $dom->createElement('a');
   $a->setAttribute('class', $node->getAttribute("class"));
   $a->setAttribute('title', $node->getAttribute("alt"));
   $href = parse_url($node->getAttribute("src"), PHP_URL_PATH);
   $a->setAttribute('href', '..' . str_replace('/thumbs/100/', '/', $href));
   $a->setAttribute('style', "background: url('..$href'); -webkit-background-size:cover; background-size:cover;");
   $node->parentNode->insertBefore($a, $node);
   $node->parentNode->removeChild($node);
}
echo $dom->saveHTML();
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
nokimaro
@nokimaro Куратор тега PHP
https://regex101.com/r/F7rShw/4

поиск
<img src=".*?((/img/[^"]+)/thumbs/([^"]+))".*alt="(.*?)"[^>]*class="([^"]*popup-img[^"]*)"[^>]*>


замена
<a class="$5" href="..$2/$3" title="$4" style="background: url('..$1');-webkit-background-size: cover;background-size: cover;"></a>


Для парсинга HTML рекомендую использовать DOM/XPATH или обёртку по типу Simple Html DOM
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Spice IT Recruitment Москва
До 230 000 ₽
ImageSpark Санкт-Петербург
от 60 000 ₽
FrozenEon Киев
от 1 500 до 3 000 $