parser loadhtmlfile leer php html5 domdocument

leer - php domdocument loadhtmlfile



DOMDocument:: loadHTML error (2)

Construyo un script que combina todos los css en una página para usarlo en mi cms. Funcionó bien durante mucho tiempo, ahora obtengo este error:


Advertencia : DOMDocument :: loadHTML () [domdocument.loadhtml]: el encabezado de la etiqueta no es válido en la Entidad, línea: 10 en css.php en la línea 26

Advertencia : DOMDocument :: loadHTML () [domdocument.loadhtml]: Tag nav inválido en Entidad, línea: 10 en css.php en la línea 26

Advertencia : DOMDocument :: loadHTML () [domdocument.loadhtml]: Sección de etiqueta no válida en Entidad, línea: 22 en css.php en la línea 26

Este es el script php

Este es mi código:

<?php header(''Content-type: text/css''); include (''../global.php''); if ($usetpl == ''1'') { $client = New client(); $tplname = $client->template(); $location = "../templates/$tplname/header.php"; $page = file_get_contents($location); } else { $page = file_get_contents(''../index.php''); } class StyleSheets extends DOMDocument implements IteratorAggregate { public function __construct ($source) { parent::__construct(); $this->loadHTML($source); } public function getIterator () { static $array; if (NULL === $array) { $xp = new DOMXPath($this); $expression = ''//head/link[@rel="stylesheet"]/@href''; $array = array(); foreach ($xp->query($expression) as $node) $array[] = $node->nodeValue; } return new ArrayIterator($array); } } foreach (new StyleSheets($page) as $index => $file) { $css = file_get_contents($file); echo $css; }


Con un objeto DOMDocument, debería poder colocar una @ antes del método de carga para SUPRIMIR todas las ADVERTENCIAS.

$dom = new DOMDocument; @$dom->loadHTML($source);

Y seguir.


Encabezado, navegación y sección son elementos de HTML5. Debido a que los desarrolladores de HTML5 consideraron que es demasiado difícil recordar los identificadores públicos y del sistema, la declaración DocType es simplemente:

<!DOCTYPE html>

En otras palabras, no hay una DTD para verificar, lo que hará que DOM use la DTD de transición HTML4 y que no contenga esos elementos, por lo tanto, las Advertencias.

Para suprimir las advertencias, poner

libxml_use_internal_errors(true);

antes de la llamada a loadHTML y

libxml_use_internal_errors(false);

después de.

Una alternativa sería utilizar https://github.com/html5lib/html5lib-php .