PHP DOMDocument ドキュメントでは、すぐに UTF-8 エンコーディングをサポートしていることが示唆されていますが、提供されているコード サンプルが示すように、常にサポートされるわけではありません。ケース。この問題は、DOMDocument::loadHTML() が、歴史的に ISO-8859-1 (Latin-1) である特定のエンコーディングの HTML 文字列を想定しているために発生します。
この問題を解決するには、文字列を DOMDocument が処理できるエンコーディングに変換する必要があります。 1 つのオプションは、非 ASCII 文字を HTML エンティティに変換し、効果的にエスケープすることです。これは、'HTML-ENTITIES' ターゲット エンコーディングを指定した mb_convert_encoding() 関数を使用して実現できます。
もう 1 つのアプローチは、ドキュメントのエンコーディングをヒントにすることです。 を追加することで、タグを HTML 文字列の先頭に追加します。このタグは文字セットを指定します。この場合は UTF-8:
<meta http-equiv="content-type" content="text/html; charset=utf-8">
このメタ タグは自動的に
に配置されます。HTML エンティティの使用例を示します。
$html = '<meta http-equiv="content-type" content="text/html; charset=utf-8">
<html><head><title>Test!</title></head><body><h1>☆ Hello ☆ World ☆</h1></body></html>';
$dom = new DOMDocument('1.0', 'utf-8');
$dom->loadHTML($html);
header('Content-Type: text/html; charset=utf-8');
echo($dom->saveHTML());
使用方法どちらの方法でも、DOMDocument が UTF-8 文字を正しく処理できることを確認でき、プログラムが目的の結果を出力できるようになります。
<meta http-equiv="content-type" content="text/html; charset=utf-8">Test! ☆ Hello ☆ World ☆
以上がPHP で HTML 文字列をロードするときに DOMDocument が UTF-8 エンコーディングで苦労するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。