DOMDocument::loadHTML

文字列から HTML を読み込む

説明

public bool DOMDocument::loadHTML(string $source, int $options = 0)

この関数は、文字列 source に含まれる HTML を パースします。XML を読み込む場合とは異なり、妥当な HTML でなくても 読み込むことができます。

警告

この関数は、HTML4 のパーサを使って入力をパースします。モダンなWebブラウザが採用している HTML5 のパースルールとは異なります。入力によっては、このことが原因で異なるDOM構造になるかもしれません。よって、この関数はHTMLを無害化する目的で安全に使えません。

HTML をパースする挙動は、利用している libxml のバージョンに依存します。 特にエッジケースやエラーハンドリングについてそれが当てはまります。 HTML5 に準拠したパースを行うには、PHP 8.4 で追加される Dom\HTMLDocument::createFromStringDom\HTMLDocument::createFromFile を使いましょう。

例を挙げましょう。HTML要素によっては、暗黙のうちに親の要素を閉じるものがあります。親要素を自動で閉じるルールは、HTML4 と HTML5 で異なります。よって、DOMDocument が表す DOM 構造は Webブラウザ上のそれと異なる可能性があります。このことから、攻撃者がHTMLを壊す攻撃を許す可能性があります。

パラメータ

source

HTML 文字列。

options

追加の Libxml パラメータ を、ビット演算子の OR で指定します。

戻り値

成功した場合に true を、失敗した場合に false を返します。

エラー / 例外

空の文字列を source に渡すと、警告が発生します。 この警告は libxml が発するものではないので、libxml のエラー処理関数では処理できません。

壊れた HTML も読み込めますが、マークアップが正しくない場合には E_WARNING が発生します。 このエラーの処理には libxml のエラー処理関数 が使えます。

変更履歴

バージョン 説明
8.3.0 この関数の仮の戻り値の型が、bool になりました。
8.0.0 この関数を static メソッドとしてコールすると、 Error がスローされるようになりました。 これより前のバージョンでは、 E_DEPRECATED が発生していました。

例1 ドキュメントを作成する

<?php
$doc = new DOMDocument();
$doc->loadHTML("<html><body>Test<br></body></html>");
echo $doc->saveHTML();
?>

参考

  • DOMDocument::loadHTMLFile
  • DOMDocument::saveHTML
  • DOMDocument::saveHTMLFile