web-dev-qa-db-ja.com

PHP DOMDocument :: loadHTML()[domdocument.loadhtml]:htmlParseEntityRef:エンティティに名前がありません

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

重大度:警告

メッセージ: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.";
    }
13
David

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

 libxml_use_internal_errors(true);

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

@$dom->loadHTML($html);
40
Kris

これは不正な&シンボルは、適切なタグが直後に続きます。それ以外の場合は、不足している;エラー。参照: 警告:DOMDocument :: loadHTML():htmlParseEntityRef:expecting ';' in Entity、

解決策は-&記号と&amp;
またはそれが必要な場合&その場合、可能性があります次のように囲むことができます:<![CDATA[-]]>

14
Ujjwal Singh

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

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

2
DeltaLee