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 безопаснее и стабильнее, чем обычный выражение.