PHP DOMDocument::loadHTML で UTF-8 をエンコードできませんでした
特定のシナリオでは、DOMDocument::loadHTML を使用して HTML を解析しようとすると、特に UTF-8 エンコーディングが関係する場合、エンコーディングの問題が発生します。この記事では、これらの問題の背後にある理由を調査し、それらに効果的に対処するためのいくつかの解決策を提供します。
問題の原因
デフォルトでは、DOMDocument は文字列を ISO でエンコードされたものとして扱います。 8859-1。HTTP/1.1 のデフォルト文字セットです。ただし、この仮定の下では UTF-8 文字列が誤って解釈され、エンコード エラーが発生します。
代替ソリューション
1.エンコーディング宣言を先頭に追加する
直接的な (X)HTML スニペットの場合は、XML またはメタ文字セット宣言を先頭に追加して、文字列を UTF-8 として扱うようにパーサーに指示します:
$contentType = '<meta http-equiv="Content-Type" content="text/html; charset=utf-8">'; $dom->loadHTML($contentType . $profile); $dom->loadHTML('<meta charset="utf8">' . $profile);
2. HTML SmartDOMDocument の使用
この回避策は、前のエンコード宣言を特定できない場合に適用できます。
$dom->loadHTML(mb_convert_encoding($profile, 'HTML-ENTITIES', 'UTF-8'));
3. PHP 8.2 の回避策
PHP 8.2 の場合は、次のアプローチを使用します。
$dom->loadHTML(mb_encode_numericentity($profile, [0x80, 0x10FFFF, 0, ~0], 'UTF-8'));
結論
エンコーディングの問題の原因を理解することによって適切なソリューションを採用することで、開発者は PHP の UTF-8 エンコーディングを使用して HTML を効果的に解析できます。 DOMDocument::loadHTML メソッド。
以上がPHP DOMDocument::loadHTML が UTF-8 エンコーディングで失敗するのはなぜですか? どうすれば修正できますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。