Php 如何检测savehtml何时失败?
这是一个创建dom并保存html的示例php代码Php 如何检测savehtml何时失败?,php,Php,这是一个创建dom并保存html的示例php代码 $doc = new DOMDocument('1.0'); $root = $doc->createElement('html'); $root = $doc->appendChild($root); $head = $doc->createElement('head'); $head = $root->appendChild($head); $title = $doc->createElement('tit
$doc = new DOMDocument('1.0');
$root = $doc->createElement('html');
$root = $doc->appendChild($root);
$head = $doc->createElement('head');
$head = $root->appendChild($head);
$title = $doc->createElement('title');
$title = $head->appendChild($title);
$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);
echo $doc->saveHTML();
如何在save或saveHTML()失败时捕获
谢谢你的帮助
更新:
我希望捕获以下代码中的错误。我特意构造了一个随机字符串。我想将此字符串加载到dom文档并捕获错误
<?php
$str = "uyiuyiuhkjh<><><.,><.<.";
$dom = new DOMDocument;
$dom->loadHTML($str);
$saved = $dom->saveHTML();
//This doesnt work.
if ($saved === false){
echo 'Unable to save DOM document';
}
else{
echo $saved;
}
?>
更新2:
以下代码将失败。i、 e解析时,它无法识别导航标记。它在实体中提供了一个错误标记nav invalid
<?php
$str = "<html> <head> </head> <body> <nav> </nav> </body> </html>";
$dom = new DOMDocument;
$dom->loadHTML($str);
$saved = $dom->saveHTML();
if ($saved === false){
echo 'Unable to save DOM document';
}
else{
echo $saved;
}
?>
现在,为了抑制错误,我可以使用libxml\u use\u internal\u errors(true);但是现在错误消息消失了,但是$dom->saveHTML()仍然没有返回false或empty,因此很难知道saveHTML或loadHTML何时出错。请帮忙 我建议您阅读DOMDocument::saveHTML上的 当DOMDocument::saveHTML失败时,它将返回false。如果您想禁用LIbXML错误并自己获取这些错误,请考虑使用.< /P>
如果您不关心任何错误消息,您可以使用它,如果发生错误,它将返回一个LibXMLError对象,否则为false。
$foo=$doc->saveHTML();if(empty($foo)){die(“Ruhroh”);}
很抱歉,我尝试了这个,但没有成功。我只收到警告。有关禁用libxml错误的信息,请参阅我的更新答案。这将隐藏错误,但我们仍然无法知道loadHTML或saveHTML何时失败。您能看看上面更新的答案吗?在我的答案中,我声明您必须使用libxml_get_errors()来查看是否有任何被抑制的错误。我已经更新了我的答案,以包括一个如何做到这一点的例子。让我知道它是否有效!
<?php
libxml_use_internal_errors(true);
$doc = new DOMDocument('1.0');
$root = $doc->createElement('html');
$root = $doc->appendChild($root);
$head = $doc->createElement('head');
$head = $root->appendChild($head);
$title = $doc->createElement('title');
$title = $head->appendChild($title);
$text = $doc->createTextNode('This is the title');
$text = $title->appendChild($text);
$saved = $doc->saveHTML();
if ($saved === false) {
echo 'Unable to save DOM document';
} else {
echo $saved;
}
if ($errors = libxml_get_errors()) {
foreach ($errors as $error) {
echo $error->message . PHP_EOL;
}
}