Удалить теги из HTML не удаляются

1

Я здесь что-то не так? Я пытаюсь удалить все теги из одного из следующих: style, script, pre, code.

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

$removes = $xpath->query('//style | //script | //pre | //code');

if($removes instanceof DOMNodeList){
    foreach($removes as $removable){
        if($removable instanceof DOMElement){
            $removable->parentNode->removeChild($removable);
        }
    }
}

$content = $this->document->getElementsByTagName('body')->item(0)->nodeValue;

var_dump($content);
  • 0
    У вас есть пример HTML, чтобы попробовать это?
  • 0
    Я использовал это: view-source: phpsnips.com/129/…
Показать ещё 5 комментариев
Теги:

2 ответа

2
Лучший ответ

Ваш код, в отдельности, отлично работает. Вероятно, вы работаете в пространстве имен, и поэтому ваши проверки instanceof должны использовать полностью квалифицированные имена \DOMNodeList и \DOMElement (обратите внимание на обратную косую черту).

  • 0
    У меня есть: use DOMDocument; use DOMElement; use DOMXPath;
  • 1
    Вы пропустили DOMNodeList из этого списка.
Показать ещё 4 комментария
-2

Возможно, это решение вам интересно:

function strip_selected_tags($text, $tags = array())
{
  foreach ($tags as $tag){
    if(preg_match_all('/<'.$tag.'[^>]*>(.*)<\/'.$tag.'>/iU', $text, $found)){
      $text = str_replace($found[0],$found[1],$text);
    }
  }

  return $text;
}

$tags = array( 'style', 'script', 'pre', 'code');
echo strip_selected_tags($text,$tags);
  • 1
    так много синтаксических ошибок. и использование регулярных выражений для разбора HTML не очень хорошая идея
  • 0
    Извините за ошибки. Теперь это должно работать.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню