[PHP] DOMDocument::loadHTML()で日本語が文字化けするとき

カテゴリ: 未分類

発生した問題

phpのDOMDocument::loadHTML($html)でutf-8のhtmlを読み込ませたところ、日本語が文字化けした。(¤ªã‚ãƒãƒªã‚ノãのような文字列になる)

原因

loadHTML()メソッドは、指示をしないと引数で渡された文字列をISO-8859-1であるとみなします。

このため渡されたutf-8文字列をISO-8859-1として解釈し、結果として文字化けが発生します。
これは、入力された$htmlに<meta charset="utf-8">といった指定があっても同様です。

対応

以下のようにして、入力文字列のエンコーディングを指定します。

$dom->loadHTML('<?xml encoding="utf-8" ?>' . $html);

もしくは、以下のように文字コードを予め変換しても良いです。下記のコードは、UTF-8文字列で有ることがわかっている$htmlをHTML-ENTITIESに変換します。

$dom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));

Amazonでおトクに買い物する方法
AmazonチャージでポイントGET


Amazonは買いもの前にAmazonギフト券をチャージしてポイントをゲットしないと損!

こちらもおススメ

コメントを残す

メールアドレスが公開されることはありません。