PHP DOMDocument loadHTML は UTF-8 を正しくエンコードできません
DOMDocument のloadHTML メソッドは、入力が ISO-8859-1 でエンコードされていることを前提としています。 UTF-8 の不正なエンコードにつながる
DOMDocument で使用される基になるパーサーは HTML4 入力を想定しているため、HTML5 ドキュメントで問題が発生する可能性があります。
解決策:
この問題を解決するには、次のいずれかを使用して HTML の文字エンコーディングを指定します。メソッド:
XML エンコーディング宣言:
ContentType ヘッダー:
XML エンコーディング プレフィックス:
不明な HTML の回避策内容:
エンコーディングについて推測できない場合は、SmartDOMDocument または次の PHP コードのような回避策を採用してください:
$profile = '<p>イリノイ州シカゴにて、アイルランド系の家庭に、9</p>'; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();
PHP 8.2 の注意:
PHP 8.2 では、mb_convert_encoding 関数は非推奨の警告。代替案:
$dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
理想的ではありませんが、この方法はすべての文字を ISO-8859-1 で表現できるため、安全なエンコードを保証します。
以上がUTF-8 エンコーディングで PHP DOMDocument のloadHTML が失敗するのはなぜですか? どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。