php - 在非对象简单的html dom上调用成员函数find()

时间:2015-05-05 13:02:02

标签: php simple-html-dom

我想从网站上获取HTML代码,我正在使用此代码执行此操作,但我收到此错误: 在非对象上调用成员函数find()

这是代码:

include_once('simple_html_dom.php');

$fileEndEnd = mb_convert_encoding("http://www.yjc.ir/fa/news/5192798/%D8%B3%DB%8C%D8%B3%DB%8C-%D8%AE%D9%88%D8%A7%D8%B3%D8%AA%D8%A7%D8%B1-%D8%AA%D9%88%D9%82%D9%81-%D8%AD%D9%85%D9%84%D8%A7%D8%AA-%D9%87%D9%88%D8%A7%DB%8C%DB%8C-%D8%B9%D8%B1%D8%A8%D8%B3%D8%AA%D8%A7%D9%86-%D8%A8%D9%87-%DB%8C%D9%85%D9%86-%D8%B4%D8%AF", 'HTML-ENTITIES', "UTF-8");

$c=curl_init($fileEndEnd);
curl_setopt( $c, CURLOPT_USERAGENT,'nginx-curl-blahblahblah' );
curl_setopt( $c, CURLOPT_RETURNTRANSFER, true );
$r=curl_exec( $c );
curl_close( $c );

$html = str_get_html($r);
foreach($html->find('div.body') as $e)
    $a= $e->outertext . '<br>';

错误在这一行:

foreach($html->find('div.body') as $e)

我确定$ r变量有html代码,我回显$ r并获得完整的html代码。

我做错了什么?

谢谢

1 个答案:

答案 0 :(得分:1)

您收到此错误,因为显然$html不是object

根据simple-html-dom的API,str_get_html函数应该返回一个对象。但是,当我过度查看该库的源代码时,我注意到以下代码:

// get html dom from string
function str_get_html($str, $lowercase=true, $forceTagsClosed=true, $target_charset = DEFAULT_TARGET_CHARSET, $stripRN=true, $defaultBRText=DEFAULT_BR_TEXT, $defaultSpanText=DEFAULT_SPAN_TEXT)
{
    $dom = new simple_html_dom(null, $lowercase, $forceTagsClosed, $target_charset, $stripRN, $defaultBRText, $defaultSpanText);
    if (empty($str) || strlen($str) > MAX_FILE_SIZE)
    {
        $dom->clear();
        return false;
    }
    $dom->load($str, $lowercase, $stripRN);
    return $dom;
}

因此,如果$str参数为空,或者如果该字符串的长度大于MAX_FILE_SIZE常量,则返回false(而不是对象)。我相信情况可能就是这样。

老实说,除了像simple-html-dom这样的流行图书馆之外,还有更全面的api文档。