Я здесь что-то не так? Я пытаюсь удалить все теги из одного из следующих: 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);
Ваш код, в отдельности, отлично работает. Вероятно, вы работаете в пространстве имен, и поэтому ваши проверки instanceof
должны использовать полностью квалифицированные имена \DOMNodeList
и \DOMElement
(обратите внимание на обратную косую черту).
use DOMDocument; use DOMElement; use DOMXPath;
DOMNodeList
из этого списка.
Возможно, это решение вам интересно:
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);