Ошибка DOMDocument:: loadHTML
Я создаю script, который объединяет все css на странице вместе, чтобы использовать его в моих cms. Он работал отлично в течение длительного времени, теперь я получаю эту ошибку:
Предупреждение: DOMDocument:: loadHTML() [domdocument.loadhtml]: Недопустимый заголовок тега в Entity, строка: 10 in css.php on line 26
Предупреждение: DOMDocument:: loadHTML() [domdocument.loadhtml]: тег nav недействителен в Entity, line: 10 in css.php в строке 26
Предупреждение: DOMDocument:: loadHTML() [domdocument.loadhtml]: тег раздел недействителен в Entity, строка: 22 в css.php в строке 26
Это php script
Это мой код:
<?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;
}
Ответы
Ответ 1
Заголовок, Nav и раздел являются элементами HTML5. Поскольку разработчики HTML5 считали слишком сложным запоминать публичные и системные идентификаторы, объявление DocType справедливо:
<!DOCTYPE html>
Другими словами, DTD не проверяет, что сделает DOM использующим DTD HTML4 Transitional и который не содержит эти элементы, следовательно, предупреждения.
Чтобы подавить предупреждения, поставьте
libxml_use_internal_errors(true);
перед вызовом loadHTML
и
libxml_use_internal_errors(false);
после него.
Альтернативой может быть использование https://github.com/html5lib/html5lib-php.