PHP: strip tags-удалить только определенные теги (и их содержимое)?

я использую

2 ответов


используйте регулярное выражение. Что-то вроде этого должно работать:

$tags = array( 'p', 'span');
$text = preg_replace( '#<(' . implode( '|', $tags) . ')>.*?<\/>#s', '', $text);

на демо показывает, что он заменяет нужные теги ничем.

обратите внимание, что вам может потребоваться настроить его больше, скажем, чтобы компенсировать пробелы в тегах или другие неизвестные, которые ваш пример не демонстрирует.

вот регулярное выражение для захвата тегов с атрибутами или без них:

'#<(' . implode( '|', $tags) . ')(?:[^>]+)?>.*?<\/>#s'

вы говорите, что используете простой HTML DOM (хорошо! Это правильный способ разбора HTML). Когда мне нужно удалить тег и его содержимое, я делаю:

$rows = $html->find("span");

foreach ($rows as $row)
{
  $row->outertext = "";
}

$html->load($html->save());

последняя строка требуется, потому что DOM запутывается после внесения изменений, поэтому весь DOM должен быть свернут, а затем проанализирован снова, чтобы изменения были сделаны постоянными (IMO, ошибка в простом HTML DOM).

простой подход HTML DOM безопаснее и стабильнее, чем обычный выражение.