首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >禁止使用DomDocument加载格式不正确的超文本标记语言时出现警告

禁止使用DomDocument加载格式不正确的超文本标记语言时出现警告
EN

Stack Overflow用户
提问于 2009-07-19 00:09:15
回答 3查看 49.3K关注 0票数 85

我需要解析一些HTML文件,但是,它们不是格式良好的,PHP会打印出警告。我想通过编程来避免这种调试/警告行为。请给我建议。谢谢!

代码:

代码语言:javascript
复制
// create a DOM document and load the HTML data
$xmlDoc = new DomDocument;
// this dumps out the warnings
$xmlDoc->loadHTML($fetchResult);

这一点:

代码语言:javascript
复制
@$xmlDoc->loadHTML($fetchResult)

我可以抑制警告,但我如何才能以编程方式捕获这些警告呢?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2009-07-19 00:39:40

可以使用set_error_handler安装临时错误处理程序

代码语言:javascript
复制
class ErrorTrap {
  protected $callback;
  protected $errors = array();
  function __construct($callback) {
    $this->callback = $callback;
  }
  function call() {
    $result = null;
    set_error_handler(array($this, 'onError'));
    try {
      $result = call_user_func_array($this->callback, func_get_args());
    } catch (Exception $ex) {
      restore_error_handler();        
      throw $ex;
    }
    restore_error_handler();
    return $result;
  }
  function onError($errno, $errstr, $errfile, $errline) {
    $this->errors[] = array($errno, $errstr, $errfile, $errline);
  }
  function ok() {
    return count($this->errors) === 0;
  }
  function errors() {
    return $this->errors;
  }
}

用法:

代码语言:javascript
复制
// create a DOM document and load the HTML data
$xmlDoc = new DomDocument();
$caller = new ErrorTrap(array($xmlDoc, 'loadHTML'));
// this doesn't dump out any warnings
$caller->call($fetchResult);
if (!$caller->ok()) {
  var_dump($caller->errors());
}
票数 14
EN

Stack Overflow用户

发布于 2010-05-17 14:54:29

打电话

代码语言:javascript
复制
libxml_use_internal_errors(true);

在使用$xmlDoc->loadHTML()进行处理之前

这会将libxml2 not to send错误和警告告知PHP。然后,为了检查错误并自己处理它们,您可以在准备好时咨询libxml_get_last_error()和/或libxml_get_errors()

代码语言:javascript
复制
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$errors = libxml_get_errors();
foreach ($errors as $error) {
    // handle the errors as you wish
}
票数 232
EN

Stack Overflow用户

发布于 2018-08-03 14:50:31

设置选项"LIBXML_NOWARNING“和"LIBXML_NOERROR”也可以很好地工作:

代码语言:javascript
复制
$dom->loadHTML($html, LIBXML_NOWARNING | LIBXML_NOERROR);
票数 33
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1148928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档