特定のウェブページから「リンク」要素を取得しようとしています。私は何が間違っているのか理解できません。次のエラーが発生します。
重大度:警告
メッセージ: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.";
}
これは、HTMLコードの一部が無効であることを意味します。これは単なる警告であり、エラーではありません。スクリプトはそれを処理します。警告セットを抑制するには
libxml_use_internal_errors(true);
または、次のようにして警告を完全に抑制することもできます
@$dom->loadHTML($html);
これは不正な&
シンボルは、適切なタグが直後に続きます。それ以外の場合は、不足している;
エラー。参照: 警告:DOMDocument :: loadHTML():htmlParseEntityRef:expecting ';' in Entity、 。
解決策は-&
記号と&
またはそれが必要な場合&
その場合、可能性があります次のように囲むことができます:<![CDATA[
-]]>
HTMLの形式が不十分です。十分に形成されていないと、DOMドキュメントへのHTMLの読み込みが失敗する可能性さえあります。 loadHTMLが機能していない場合、エラーを抑制しても意味がありません。 HTMLをDOMにロードできない場合は、HTML Tidyなどのツールを使用して、整形式のHTMLを「クリーンアップ」することをお勧めします。
HTML Tidyはここにあります http://www.htacg.org/tidy-html5/