役立つ情報
登録日: 2025-03-02   最終更新日: 2025-03-23

ERROR: DOMDocument::loadHTML(): Tag digits invalid in Entity の解決方法

DOMDocument::loadHTML() を使用してHTMLを解析する際に、 Tag digits invalid in Entity というエラーが発生する場合、HTMLの内容に問題がある可能性が高いです。特に、HTMLが適切にエンコードされていない場合にこのエラーが発生することがあります。

解決方法

エンコーディングを明示する

PHPの DOMDocument は UTF-8 をデフォルトのエンコーディングとして扱わないため、HTMLの読み込み前にエンコーディングを指定するのが有効です。


$dom = new DOMDocument();
libxml_use_internal_errors(true); // エラーを無視する設定
$html = mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'); // 文字エンコーディング変換
$dom->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
libxml_clear_errors();

ポイント

  • mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8') を使い、UTF-8を適切にエンコードする
  • libxml_use_internal_errors(true); を指定し、解析時のエラーを無視
  • LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD フラグを追加( や タグがなくても解析を続行)

HTMLエンティティのエスケープを確認

HTML内に不適切なエンティティ( & や < など)が適切にエスケープされていない場合、 loadHTML() でエラーが発生することがあります。


$html = htmlspecialchars_decode($html, ENT_QUOTES);

HTMLの構造を確認

digits というタグが誤ってHTML内に含まれている可能性があります。エラーが出ている部分のHTMLを確認し、 のような誤ったタグがないかをチェックしてください。

代替ライブラリを使用する

もし DOMDocument::loadHTML() での解析がうまくいかない場合、 simplexml_load_string() や DOMXPath を併用する方法もあります。


$dom = new DOMDocument();
libxml_use_internal_errors(true);
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
libxml_clear_errors();

Copyright 役立つ情報.net