Простая загрузка HTML DOM(), возвращающая значение null

Я пытаюсь извлечь все из тегов <body> обычного HTML-документа.

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.

EDIT: При тестировании, если я скопирую пример из документации, изменив HTML следующим образом, я все равно получаю ту же ошибку.

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

person John Magnolia    schedule 30.04.2012    source источник
comment
Вы уверены, что уведомление выдает find(), а не ->innertext? Например, $doc, вероятно, не NULL, но поиск find возвращает null?   -  person Nanne    schedule 30.04.2012
comment
Согласно документу 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‹5   -  person web-nomad    schedule 30.04.2012
comment
@ Нанна, да, вы правы, потому что, когда я удаляю находку (тело), ​​она работает. Хотя почему он не мог найти тело?   -  person John Magnolia    schedule 30.04.2012


Ответы (1)


Кажется, что find возвращает array, а не объект.

Откуда: http://simplehtmldom.sourceforge.net/manual.htm

// Находим все якоря, возвращает массив объектов-элементов
$ret =$html->find('a');

(выделено мной).

person Nanne    schedule 30.04.2012