PHP loadHTMLFile に再びハマる

PHP DOM操作における文字化けで1回既にハマっていたのに、今回また同じ様にハマってしまった。
しかも、2日がかりで。
悔しいので、今回気付いた点を纏めておきたい。

(1)UTF-8Nで書いたソースは何にエンコードされるのか?

UTF-8(BOMあり)にエンコードされるようです。
試しに、sample.htmlをUTF-8(BOMあり)で保存して実行すると
文字化けをせず、正しく表示されます。

(2)loadHTMLFile()以外の場合は?

$sou = file_get_contents(./sample.html);
echo &sou;

として確認してみると、文字化けはしません。
と言うことは

$dom = new DOMDocument();  // ①
@$dom->loadHTML($sou);     // ②

②の中で、HTMLのmeta情報に基づいてコードが変換される
と言うことなのでしょう。

(3)php.iniとの関連は?

本件に関しては、、全く関連なしでした。
原因が(2)にあるので、当然と言えば当然です。
いろいろと、2日間ももがき苦しんだ中で、php.iniのmbstringの設定が
推奨されなく成っている所が何点かあるのが分かりました。

対策ついでに、PHP-5.4.7からPHP-5.6.30にバージョンアップも
行いましたが、php.iniのmbstringの設定を以下の通り変更しています。

名前 設定値 説明
mbstring.language Japanese コメントを外しただけです
mbstring.encoding_translation Off コメントを外しました

mbstring.http_input,mbstring.http_output,mbstring.internal_encoding
は、5.6.0以降は非推奨とのことなので、コメントのままにしてあります。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA


This blog is kept spam free by WP-SpamFree.