note 125361 added to domdocument.loadhtml

From: Date: Mon, 14 Sep 2020 21:25:11 +0000
Subject: note 125361 added to domdocument.loadhtml
Groups: php.notes 
Request: Send a blank email to php-notes+get-215112@lists.php.net to get a copy of this message
if you want to get rid of all the "DOMText elements containing ONLY whitespace", maybe try <?php function loadHTML_noemptywhitespace(string $html, int $extra_flags = 0, int $exclude_flags = 0): DOMDocument { $flags = LIBXML_HTML_NODEFDTD | LIBXML_NOBLANKS | LIBXML_NONET; $flags = ($flags | $extra_flags) & ~ $exclude_flags; $domd = new DOMDocument(); $domd->preserveWhiteSpace = false; @$domd->loadHTML('<?xml encoding="UTF-8">' . $html, $flags); $removeAnnoyingWhitespaceTextNodes = function (\DOMNode $node) use (&$removeAnnoyingWhitespaceTextNodes): void { if ($node->hasChildNodes()) { // Warning: it's important to do it backwards; if you do it forwards, the index for DOMNodeList might become invalidated; // that's why i don't use foreach() - don't change it (unless you know what you're doing, ofc) for ($i = $node->childNodes->length - 1; $i >= 0; --$i) { $removeAnnoyingWhitespaceTextNodes($node->childNodes->item($i)); } } if ($node->nodeType === XML_TEXT_NODE && !$node->hasChildNodes() && !$node->hasAttributes() && empty(trim($node->textContent))) { //echo "Removing annoying POS"; // var_dump($node); $node->parentNode->removeChild($node); } //elseif ($node instanceof DOMText) { echo "not removed"; var_dump($node, $node->hasChildNodes(), $node->hasAttributes(), trim($node->textContent)); } }; $removeAnnoyingWhitespaceTextNodes($domd); return $domd; } ---- Server IP: 45.112.84.4 Probable Submitter: 103.51.167.36 (proxied: 80.203.132.70) ---- Manual Page -- http://php.net/manual/en/domdocument.loadhtml.php Edit -- https://master.php.net/note/edit/125361 Del: integrated -- https://master.php.net/note/delete/125361/integrated Del: useless -- https://master.php.net/note/delete/125361/useless Del: bad code -- https://master.php.net/note/delete/125361/bad+code Del: spam -- https://master.php.net/note/delete/125361/spam Del: non-english -- https://master.php.net/note/delete/125361/non-english Del: in docs -- https://master.php.net/note/delete/125361/in+docs Del: other reasons-- https://master.php.net/note/delete/125361 Reject -- https://master.php.net/note/reject/125361 Search -- https://master.php.net/manage/user-notes.php

« previous php.notes (#215112) next »