Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何检测savehtml何时失败?_Php - Fatal编程技术网

Php 如何检测savehtml何时失败?

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

这是一个创建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('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;
    }
}