2012-04-30 115 views
0

我試圖從標準HTML文檔的<body>標籤中提取所有內容。簡單的HTML DOM加載()返回null

function extractHtml($html){ 

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

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

的傳遞$html是一個完整的HTML文檔,但是當它被使用加載load()是返回NULL。這則顯然使find()會產生一個通知

注意:試圖讓非對象

的財產還有什麼能對負載的原因()返回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的工作,以解決這個錯誤

警告:DOM文檔:: saveHTML()方法期望的是0,參數,1給出

這是使用簡單的html dom進行測試的原因。

編輯: 當測試如果我通過更改HTML如下所示從文檔複製示例,我仍然會得到相同的錯誤。

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

你確定'find()產生通知,而不是' - > innertext'?就像in中一樣,'$ doc'可能不是'NULL',但find'find'返回'null'? – Nanne

+0

根據文檔http://simplehtmldom.sourceforge.net/index.htm,它只適用於PHP 5 + ....所以當你說'雖然我現在需要這個工作在舊版本的PHP來解決這個錯誤',它可能有問題與PHP v <5 –

+0

@南妮是的,你是正確的,因爲當我刪除find(「身體」)它的作品。雖然爲什麼它不能找到身體? –

回答