如何检测savehtml何时失败?

时间:2016-07-18 15:47:18

标签: php

这是一个示例php代码,用于创建dom并保存html。

$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();

如何在保存或保存HTML()失败时捕获?

我感谢任何帮助。

更新:

我希望在以下代码中捕获错误。我故意构造一个随机字符串。我想将此字符串加载到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:

以下代码将失败。即解析时它不识别导航标签。它在实体中给出错误标记导航无效。

<?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_use_internal_errors(true);但现在错误消息消失但$ dom-&gt; saveHTML()仍然没有返回false或空,因此很难知道saveHTML或loadHTML何时出错。请帮忙!!

1 个答案:

答案 0 :(得分:1)

我建议阅读DOMDocument :: saveHTML上的PHP documentation page

当DOMDocument :: saveHTML失败时,它将返回false。如果您想要禁用libxml错误并自行获取它们,请考虑使用libxml_use_internal_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;
}

要获取使用libxml错误时可能发生的任何错误,请使用libxml_get_errors

if ($errors = libxml_get_errors()) {
    foreach ($errors as $error) {
        echo $error->message . PHP_EOL;
    }
}

如果您不关心任何错误消息,可以使用libxml_get_last_error如果发生错误将返回LibXMLError对象,否则返回false。