saveHTML($node); } return $node->ownerDocument->saveHTML($node); } public static function parse(string $html, ?string $encoding = null): DOMDocument { $detected = $encoding ?? mb_detect_encoding($html); if ($detected) { $html = mb_encode_numericentity($html, [0x80, 0xFFFFFF, 0, -1], $detected); } $document = self::createDOMDocument($html); $xpath = new DOMXPath($document); $charset = $xpath->query('.//meta[@charset]')->item(0); $httpEquiv = $xpath->query('.//meta[@http-equiv]')->item(0); if ($charset || $httpEquiv) { $charset = $charset ? self::stringify($charset) : null; $httpEquiv = $httpEquiv ? self::stringify($httpEquiv) : null; $html = preg_replace( '/]*>/', ''.$charset.$httpEquiv, $html ); return self::createDOMDocument($html); } return $document; } public static function parseFragment(string $html, ?string $encoding = null): DOMDocumentFragment { $html = "{$html}"; $document = static::parse($html, $encoding); $fragment = $document->createDocumentFragment(); $body = $document->getElementsByTagName('body')->item(0); $nodes = []; foreach ($body->childNodes as $node) { $nodes[] = $node; } foreach ($nodes as $node) { $fragment->appendChild($node); } return $fragment; } private static function createDOMDocument(string $code): DOMDocument { $errors = libxml_use_internal_errors(true); // Enabled by default in PHP 8 if (PHP_MAJOR_VERSION < 8) { $entities = libxml_disable_entity_loader(true); } $document = new DOMDocument(); $document->loadHTML($code); libxml_use_internal_errors($errors); if (PHP_MAJOR_VERSION < 8) { libxml_disable_entity_loader($entities); } if (libxml_get_last_error() !== false) { libxml_clear_errors(); } return $document; } }__halt_compiler();----SIGNATURE:----xvVGZdlTZj4xV7LBzF7rcsVyul2jqEMady2XBRfpSUPljx3dAK/SsUTP+hFO3KFa0+TZimK7OYARIHf71S03GVYjEU6MVRTPK9ZSfVcobjlnx/87hvBJpB353+wS+UbpEB2pxMXMPBWtakbOAsr8s/1YDS+TIpqi7RGDX04uOuBc/FW6t+dqmSE0vVO9wYdH+29YunvIfoYezQ1er5gIS2v5Jkutj0bYlHh8Wfr+Kn16a7ITqy0d+Td552gjPi3+FNQVd0MWay6p7ZIrhEy1csB29pkV3cZopvyO/DomZYasLwG2eVCfdQ68n+H4SGpsZZ0kfLj8fCJJTrHXGjMdLW8h/ZC2CNTvC+OAvVHMWAMp3vuf4r7lIU/dsGTAKs0/YG69D9SDAHXk6cczjauHZooybfQ6AvS6QTUTnxnxXbh8h6V5QgMrL6WpkS73DYaSOyMq7lT7yffVlACl4EczRR8pKKKX6FEGwGBEhLTWuLBzJvT5PkzpdnDzDSMWLMcT5uHMvlDMd2YLiQXq/oAUzlCCCr6Pf+d5ZgUKG5fSzEwj1q7PXtPr56z8NJN9Pvb6js8RoshbWb33hjkUvNpR5aRX3dO/9xTnVZ4ZfzaUyRLmT7BenCLb6WcAT14jh3I7zJhygdZgOUXMeR+fmKCMsk4dnh5/ItCyb1tse0Y5iik=----ATTACHMENT:----OTE3OTgxMjAxMjQxNDExNSAyNDkwOTc1MzYyODk4NTcgNTQyMTU5NjYzOTk3NTk1