Задать вопрос
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 не работает так как бы хотелось, если ее убрать, то остальные выдают как надо

Я только учусь помогите пожалуйста решить этот вопрос
В идеале нужно находить и заменять картинки с этим классом независимо от того, указаны ли у нее другие атрибуты.
  • Вопрос задан
  • 98 просмотров
Подписаться 1 Простой 1 комментарий
Решения вопроса 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
Меня невозможно остановить, если я смогу начать.
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
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы