在非对象简单的HTML DOM上调用成员函数find()



我想从网站上获取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代码,我回声并获取完整的HTML代码。

我在做什么错?

谢谢

您正在遇到此错误,因为$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 constand,则它将返回 false(而不是对象)。我相信可能是这种情况。

说实话,除了像Simple-Html-dom这样的流行库还具有更全面的API文档。

最新更新