記事カテゴリ:
関連タグ:
development 問題点:PHPのDOMDocumentが日本語文字列をロード後に文字化けが発生しました
- 環境:PHP5.6、default_charset:utf-8
- DOMDocumentのloadHTMLメッソードで日本語文字列を読み込め、saveHTMLで読み込んだ文字列が文字化けになっていることが分かりました
$doc = new DOMDocument(); @$doc->loadHTML( $result ); // $resultが日本語文字列 echo $doc->saveHTML(); // 文字化けの文字列が表示され
原因:不明(おそらくphpの設定)
- 同じコードでLinuxとWindows環境でテストしてみたが、Windows環境は問題はありませんでした
- LinuxとWindowsのphpバージョン、mb_stringの設定は同じです
- なぜLinux上で文字化け発生したかは不明です
解決:DOMDocumentが日本語を読み込む時に文字コードを指定します
- DOMDocumentが生成した時に文字コード指定したが、失敗しました(依然文字化け)
@$doc->loadHTML('<meta http-equiv="Content-Type" content="text/html; charset=utf-8">' . $result);
結論:DOMDocumentがHTMLソースを読み込む時に文字コード指定があれば安全です
- 今回の文字化け例は文字列(HTMLソース)にHTMLのhead部分がありませんでした(charset=utf-8の設定が欠けている)
- DOMDocumentが文字列を読み込む時に、HTMLのcharsetより文字コードを扱っているようです
コメントを追加