我需要解析一些HTML文件,但是,它们的格式不正确,PHP会向输出警告.我希望通过编程避免这种调试/警告行为.请指点一下.谢谢!

代码:

// create a DOM document and load the HTML data
$xmlDoc = new DomDocument;
// this dumps out the warnings
$xmlDoc->loadHTML($fetchResult);

这是:

@$xmlDoc->loadHTML($fetchResult)

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

推荐答案

你可以安装一个临时错误处理程序

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;
  }
}

用法:

// 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());
}

Php相关问答推荐

Symfony序列化程序未序列化所有类字段

p a/a/p的x路径 Select ,但不是p somethext a链接/a或某些文本/p>

如何隐藏x轴图表上的值

根据在WooCommerce购物车和 checkout 中 Select 的送货方式显示快捷代码内容

如何在laravel中使用script type= text/html/script

哪里的表现能更好?

在Laravel中创建辅助函数时的约定

Regex:高级删除单行PHP注释

从WooCommerce管理订单汇总中隐藏原始小计行

强制客户在注册时 Select WooCommerce角色

未检测到laravel控制器

重命名 WordPress 中现有的自定义分类法名称和标签

Mac 上安装 php 时出现 Homebrew 错误

主机中未检索用户表数据

当我激活插件时出现错误注意:未定义的偏移量:1

在特征中使用类的属性

循环中未序列化数组显示的问题

计算数组中连续值的数量

WooCommerce单个产品页面上启用额外选项卡的产品元框字段

PHP 中的 curl 验证失败(openssh 连接正常)