【问题标题】:Simple HTML DOM load() returning null简单的 HTML DOM load() 返回 null
【发布时间】:2012-04-30 07:54:38
【问题描述】:

我正在尝试从普通 HTML 文档的 <body> 标记中提取所有内容。

function extractHtml($html){

    $doc = new simple_html_dom();
    $html = $doc->load($html);

    return $doc->find("body")->innertext;
}

传递的$html 是一个完整的HTML 文档,尽管使用load() 加载它时返回null。这显然会导致 find() 产生通知

注意:试图获取非对象的属性

load() 返回 null 的原因是什么?

过去我做过;

function extractHtml($html){
    $dom = new DOMDocument();
    @$dom->loadHTML($html);
    $dom->preserveWhiteSpace = false;

    // get everything inside of <body>
    $body = $dom->getElementsByTagName('body');
    if($body && 0<$body->length) {
        $body = $body->item(0);
    }

    $search = array('<body', 'body>');
    $replace = array('<div', 'div>');
    return str_replace($search, $replace, $dom->saveHTML($body));
}

虽然我现在需要它在旧版本的 PHP 中工作来解决这个错误

警告:DOMDocument::saveHTML() 需要 0 个参数,给定 1 个

这就是使用简单 html dom 进行测试的原因。

编辑: 在测试我是否通过如下更改 HTML 从文档中复制示例时,我仍然得到相同的错误。

$doc->load("<html><body>Hello!</body></html>");

【问题讨论】:

  • 您确定是find() 生成通知,而不是-&gt;innertext?如,$doc 可能不是NULL,但查找find 正在返回null
  • 根据文档simplehtmldom.sourceforge.net/index.htm,它仅适用于 PHP 5+....所以当您说 Although I now need this to work in older versions of PHP to solve this error 时,它可能与 PHP v 有问题
  • @Nanne 是的,您是正确的,因为当我删除 find("body") 时它可以工作。虽然它为什么找不到尸体?

标签: php html-parsing simple-html-dom


【解决方案1】:

find 似乎返回一个array,而不是一个对象。

发件人:http://simplehtmldom.sourceforge.net/manual.htm

// 查找所有锚点,返回元素对象数组
$ret =$html->find('a');

(我的emph)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多