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 .