简单的HTML DOM load()返回null

时间:2012-04-30 07:54:39

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

我正在尝试从普通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>");

1 个答案:

答案 0 :(得分:1)

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

来自:http://simplehtmldom.sourceforge.net/manual.htm

  

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

(emph mine)。