Я пытаюсь проанализировать некоторый HTML с PHP как упражнение, выведя его как текст, и я попал в ловушку. Я хотел бы удалить теги, которые скрыты с помощью style="display: none;"
– учитывая, что тег может содержать другие атрибуты и свойства стиля.
Код, который у меня есть, следующий:
$page = preg_replace("#<([az]+).*?style=\".*?display:\s*none[^>]*>.*?</\1>#s","",$page);`
Код, возвращающий NULL
с PREG_BACKTRACK_LIMIT_ERROR
.
Я попробовал это вместо этого:
$page = preg_replace("#<([az]+)[^>]*?style=\"[^\"]*?display:\s*none[^>]*>.*?</\1>#s","",$page);
Но теперь это просто не заменяет никаких тегов.
Любая помощь приветствуется. Благодаря!
Используя DOMDocument , вы можете попробовать что-то вроде этого:
$doc = new DOMDocument; $doc->loadHTMLFile("foo.html"); $nodeList = $doc->getElementsByTagName('*'); foreach($nodeList as $node) { if(strpos(strtolower($node->getAttribute('style')), 'display: none') !== false) { $doc->removeChild($node); } } $doc->saveHTMLFile("foo.html");
Вы никогда не должны анализировать HTML с помощью Regex. Это заставляет ваши глаза кровоточить. HTML не является регулярным в любой форме. Он должен анализироваться с помощью DOM-парсера.
Разбор HTML для DOM с PHP
Разве мы этого не делали раньше?