14

特定の Web ページから「リンク」要素を取得しようとしています。私は何が間違っているのか理解できません。次のエラーが表示されます。

重大度: 警告

メッセージ: DOMDocument::loadHTML() [domdocument.loadhtml]: htmlParseEntityRef: エンティティに名前がありません、行: 536

ファイル名: controllers/test.php

ライン番号: 34

コードの 34 行目は次のとおりです。

      $dom->loadHTML($html);

私のコード:

            $url = "http://www.amazon.com/";

    $ch = curl_init();

    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);
    if($html = curl_exec($ch)){

        // parse the html into a DOMDocument
        $dom = new DOMDocument();

        $dom->recover = true;
        $dom->strictErrorChecking = false;

        $dom->loadHTML($html);

        $hrefs = $dom->getElementsByTagName('a');

        echo "<pre>";
        print_r($hrefs);
        echo "</pre>";

        curl_close($ch);


    }else{
        echo "The website could not be reached.";
    }
4

3 に答える 3

42

これは、HTML コードの一部が無効であることを意味します。これは単なる警告であり、エラーではありません。スクリプトは引き続きそれを処理します。警告セットを抑制するには

 libxml_use_internal_errors(true);

または、次のようにして警告を完全に抑制することもできます

@$dom->loadHTML($html);
于 2012-09-08T05:42:35.353 に答える
15

&これは、適切なタグがすぐに続く不正なシンボルが原因である可能性があります。そうしないと、不足している;エラーが表示されます。参照:警告: DOMDocument::loadHTML(): htmlParseEntityRef: ';' が必要です エンティティで、 .

&解決策は次のとおりです-シンボルを次のように置き換えるか、それをそのままにして&amp;
おく必要がある場合は、次のように囲むことができます: -&<![CDATA[]]>

于 2012-12-31T21:48:31.017 に答える
2

HTML の形式が適切ではありません。不十分な形式の場合、DOM ドキュメントへの HTML のロードが失敗することさえあります。loadHTML が機能していない場合、エラーを抑制しても意味がありません。HTML を DOM に読み込めない場合は、HTML Tidy のようなツールを使用して、不適切な形式の HTML を「クリーンアップ」することをお勧めします。

HTML Tidy はhttp://www.htacg.org/tidy-html5/にあります。

于 2015-07-17T21:48:00.837 に答える