我构建了一个脚本,该脚本将页面上的所有CSS组合在一起,以在我的cms中使用它。很长一段时间它工作正常,现在我收到此错误:
这是我的代码:
<?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;
}
最佳答案
Header,Nav和Section是HTML5中的元素。因为HTML5开发人员觉得记住公共(public)和系统标识符太困难了,所以DocType声明只是:
<!DOCTYPE html>
换句话说,没有要检查的DTD,这将使DOM使用HTML4过渡DTD,并且不包含那些元素,因此是警告。
要取消警告,请放
libxml_use_internal_errors(true);
在调用
loadHTML
之前和libxml_use_internal_errors(false);
之后。
一种替代方法是使用https://github.com/html5lib/html5lib-php。