PHP замена тега другим тегом

144
02 февраля 2020, 00:40

Подскажите, допустим у меня есть такая структура в html:

<div class="class1 ">
    <a>link</a>
</div>
<div class="class2">
    <a>link</a>
</div>
<div class="class1">
    <a>link</a>
</div>
<div class="class2">
    <a>link</a>
</div>

Мне нужна функция PHP которая найдет все div с классом class2 и внутри заменит <a> на <span>, но так, чтобы содержимое(то есть 'link') осталось неизменным.

Подскажите как это сделать пожалуйста

Answer 1

Можете воспользоваться библиотеками наподобие Simple HTML DOM:

$html = str_get_html($txt);
foreach($html->find(".class2 a") as $a){
    $a->outertext = "<span>" . $a->innertext . "</span>";
}
echo $html;
Answer 2

Ещё один вариант - регулярные выражения (но вариант с Simple HTML DOM предпочтительней):

$txt = preg_replace_callback(
    '~<div[^>]+class="class2"[^>]*>\K(.+?)(?=</div>)~s',
    function($m){
        return preg_replace('~<a[^>]*>(.+?)</a>~', '<span>$1</span>', $m[1]);
    },
    $txt
);
echo $txt;

См. Демо

READ ALSO
Почему при отправке XML в cdek, выдает ошибку 400?

Почему при отправке XML в cdek, выдает ошибку 400?

Пытаю отправить XML POST запросом по API в CDEK выдает ошибку: 400 Bad Request, служба поддержки помочь не захотела, сказали только что xml составлен правильно`

145
Как передать значение GET через header(Location)?

Как передать значение GET через header(Location)?

Столкнулся с такой проблемой: Если пользователь находится на странице, у которой есть параметр GET, как напримерphp?article=51 и хочет авторизоваться...

153
Авторизация на сайте через Facebook

Авторизация на сайте через Facebook

Пытаюсь написать регистрацию и авторизацию на сайте с помощью API фейсбукаНеобходимые данные от FB приходят, после я их заношу в БД и устанавливаю...

164