ホームページ >バックエンド開発 >PHPチュートリアル >PHP DOMDocument::loadHTML() が UTF-8 エンコーディングを正しく処理しないのはなぜですか?
PHP DOMDocument loadHTML が UTF-8 を正しくエンコードしていない
DOMDocument::loadHTML() を使用して HTML を解析しようとすると、問題が発生する可能性があります適切な UTF-8 エンコーディングを使用してください。デフォルトでは、DOMDocument は入力文字列を ISO-8859-1 として扱うため、UTF-8 データを扱うときにエラーが発生する可能性があります。
解決策:
正しいことを確認するにはエンコーディング、さまざまなを使用できますメソッド:
エンコーディング宣言をプリペンド: UTF-8 文字の存在を示す XML エンコーディング宣言または HTML メタ文字セット宣言を追加します:
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'; $dom->loadHTML($contentType . $profile);
を使用するSmartDOMDocument: 入力 HTML にすでに宣言が含まれている可能性がある場合は、SmartDOMDocument ライブラリを使用して潜在的な競合を解決します:
$dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
代替: PHP 8.2 では、より安全なエンコードには mb_encode_numericentity() を使用してくださいオプション:
$dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
HTML5 考慮事項:
DOMDocument は HTML4 パーサーを使用します。 HTML5 ドキュメントの場合は、HTML5 準拠用に設計された代替 HTML パーサーの使用を検討してください。
例:
次のコードは、誤った UTF-8 を修正するための mb_convert_encoding() の使用を示しています。エンコード:
$profile = ""; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として
以上がPHP DOMDocument::loadHTML() が UTF-8 エンコーディングを正しく処理しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。