発生した問題
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'));
こちらもおススメ
素晴らしい~