BoriHagen
@BoriHagen

Как удалить все из html кроме определенных тегов с содержимым?

У меня есть HTML документ, из которого нужно вырезать все теги вместе с их содержимым, за исключением всех тегов, содержащих текст. Их можно передать массивом. Но strip_tags() режет только сами теги, оставляя текст. Какие есть пути решения? Пробовал писать регулярки, но в них я не особо силен, и результат далёк от идеала.
  • Вопрос задан
  • 272 просмотра
Пригласить эксперта
Ответы на вопрос 1
slashinin
@slashinin
Задачи для PHP https://justcoding.ru
Есть метод описанные в комментариях на офф. сайте с описанием метод strip_tags();
Код рабочий, но как я понял он, как и strip_tags, плохо справляется с незакрытыми тегами.

function strip_tags_content($text, $tags = '', $invert = FALSE) 
{
  preg_match_all('/<(.+?)[\s]*\/?[\s]*>/si', trim($tags), $tags);
  $tags = array_unique($tags[1]);
   
  if(is_array($tags) AND count($tags) > 0) {
    if($invert == FALSE) {
      return preg_replace('@<(?!(?:'. implode('|', $tags) .')\b)(\w+)\b.*?>.*?</\1>@si', '', $text);
    }
    else {
      return preg_replace('@<('. implode('|', $tags) .')\b.*?>.*?</\1>@si', '', $text);
    }
  }
  elseif($invert == FALSE) {
    return preg_replace('@<(\w+)\b.*?>.*?</\1>@si', '', $text);
  }
  return $text;
}
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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