note 125361 added to domdocument.loadhtml
| From: | divinity76+spam at gmail dot com | 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