ホームページ >バックエンド開発 >PHPチュートリアル >PHP DOMDocument::loadHTML() が UTF-8 エンコーディングを正しく処理しないのはなぜですか?

PHP DOMDocument::loadHTML() が UTF-8 エンコーディングを正しく処理しないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-28 00:43:10176ブラウズ

Why is my PHP DOMDocument::loadHTML() Not Handling UTF-8 Encoding Correctly?

PHP DOMDocument loadHTML が UTF-8 を正しくエンコードしていない

DOMDocument::loadHTML() を使用して HTML を解析しようとすると、問題が発生する可能性があります適切な UTF-8 エンコーディングを使用してください。デフォルトでは、DOMDocument は入力文字列を ISO-8859-1 として扱うため、UTF-8 データを扱うときにエラーが発生する可能性があります。

解決策:

正しいことを確認するにはエンコーディング、さまざまなを使用できますメソッド:

  • エンコーディング宣言をプリペンド: UTF-8 文字の存在を示す XML エンコーディング宣言または HTML メタ文字セット宣言を追加します:

    $contentType = '<meta http-equiv=&quot;Content-Type&quot; content=&quot;text/html; charset=utf-8&quot;>';
    $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 = "

イリノイ州シカゴにて、アイルランド系の家庭に、9人兄弟の5番目として

"; $dom = new DOMDocument(); $dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8')); echo $dom->saveHTML();

以上がPHP DOMDocument::loadHTML() が UTF-8 エンコーディングを正しく処理しないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。