登録日:
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();