我有一个非常简单的实现,它引入了XML的测试位并尝试使用DOMDocument对其进行验证。在测试中,它能够很好地完成LoadHTML()调用,但是一旦我尝试运行validate(),浏览器就会永远挂起并且不会加载。这是代码:
$content = '<?xml version="1.0" encoding="utf-8"?><mainElement></mainElement>';
$dom = new DOMDocument;
$dom->LoadHTML($content);
if (!$dom->validate()) {
echo 'fail';
} else {
echo 'success!';
}
答案 0 :(得分:3)
如果你想验证用loadHTML
加载的内容,你需要DOCTYPE
declaration(没有它,你会得到一个不定式的循环)。例如,以下代码可以工作并打印fail
$content = "
<!DOCTYPE html>
<html>
<body>
Content of the document......
</body>
</html>
";
$dom = new DOMDocument();
$dom->loadHTML($content);
if (!$dom->validate()) {
echo 'fail';
} else {
echo 'success!';
}
对于XML 它更宽容(即使您没有声明dtd
它也有效,但它返回false)。在您的情况下,您可以使用loadXML
方法,您的代码将打印fail
。
使用php 7.0.13
进行测试。