0

<body>通常の HTML ドキュメントのタグ内からすべてを抽出しようとしています。

function extractHtml($html){

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

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

is を使用してロードすると null が返されます$htmlが、渡されるのは完全な HTML ドキュメントです。load()これにより、明らかに find() が通知を生成します

Notice: 非オブジェクトのプロパティを取得しようとしています

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>");
4

1 に答える 1

1

arrayfind は、オブジェクトではなくを返すようです。

から: http://simplehtmldom.sourceforge.net/manual.htm

// すべてのアンカーを検索し、要素オブジェクトの配列を返します
$ret =$html->find('a');

(エンフ鉱山)。

于 2012-04-30T08:24:55.820 に答える