PHP удаление тегов кроме тех, которые находятся внутри <code></code>

219
22 декабря 2017, 00:20

Уважаемые специалисты, помогите разобраться, пример упрощенный. Допустим есть строка

$txt="вне тега<p>внутри</p><code><b>жирный</b></code><a href='#'>Ссылка</a>";

Необходимо удалить все теги кроме содержимого в <code> чтобы получилось во так:

$txt="вне тега внутри <b>жирный</b> Ссылка";

Пример упрощенный теги могут быть любые, пока получилось удалить абсолютно все теги вот так:

$txt=preg_replace("~(\<(/?[^\>]+)\>)~uis"," ",$txt); 
echo($txt); //текст без тегов содержимое тега параграфа жирный шрифт Ссылка

Как добавить исключения для содержимого <code>? Буду очень благодарен.

Answer 1

для вашего упрощенного примера можно строку разделить по </?code> после чего у нечетных частей удалить тэги, а у четных оставить как было. Решение может быть вот такое, но надо еще расставить пробелы.

$txt = "вне тега<p>внутри</p><code><b>жирный</b></code><a href='#'>Ссылка</a>";
$data = preg_split("/(<\/?code>)/", $txt);
$result = "";
foreach($data as $k => $str){
    $result .= ($k % 2) ?  $str : strip_tags($str);
}
print_r($result);
Answer 2

Один из вариантов :

$str = 'вне <br>тега<hr /><p><b>внутри</b></p><code><b>жирный</b> <b>жирный</b></code><a href="#">Ссылка</a>';
echo parse_string($str);

function parse_string($str, $need = 'code') {
    return preg_replace_callback(
        '~<([a-z]+\d?)[^>]*>(.+?)</\1>~',
        function($m)use($need){
            return (strtolower($m[1]) != $need ? strip_tags($m[0]) : $m[2]);
        },
        preg_replace(['~<[a-z]{2,3}\s*/?>~', '~\s{2,}~'], ' ', $str) 
    );
}
READ ALSO
Как реализовать шкалу времени в html?

Как реализовать шкалу времени в html?

На сервере есть таблица 'Запись к врачу', там указан период времени, например, с 12 до 13Нужно отобразить на клиенте в виде время приема в виде...

281
Как скрыть класс по нажатию кнопки?

Как скрыть класс по нажатию кнопки?

Подскажите, как скрыть класс и саму кнопку по ее нажатию?

212
CSS Bootstrap Modal заменить затемнение на засветление

CSS Bootstrap Modal заменить затемнение на засветление

Как сделать так, чтобы при использовании стандартного всплывающего bootstrap модального окна фон страницы не затемнялся, а наоборот становился...

303
Нужна формула для псевдокласса :nth-child сss

Нужна формула для псевдокласса :nth-child сss

Нужно разместить прямоугольные дивы вот так, я так понимаю лучше всего через :nth-child или через :nth-of-type, помогите пожалуйста с формулой которую...

214