EC-CUBEの引越し ぐへっ!「入力文字が文字化けしてしまう」を解決する手順

EC-CUBEの引越し ぐへっ!「入力文字が文字化けしてしまう」を解決する手順
EC-CUBEの設置サーバーを引越しした。
綺麗に表示され、一見正常に動いているように見えたのだが、
入力画面から入力した内容の確認画面に移動すると文字が化けてしまうのだ。

DBに記録されている文字は正常だ。(Mysqlのデータを直接参照)
EC-CUBEにDBデータは正常に表示されている。
しかし画面から入力した文字は化けてしまう。
プレーンなhtmlページは正常に表示されている。
これらの事実から、MySQLがらみではなく、そしてapacheよりもphp設定(文字変換処理関係)がかなり怪しいことが推測される。
サーバーに以下のphpファイルを作成してアップロードしphpの実行環境に関する情報を集める。
ファイル名:phpinfo.php
<?php
phpinfo()
?>

※phpinfoを実行しているだけです。
一番怪しい、mbstringの項目を現行サーバーと比較してみるとやはり違っていました。
現行サーバー
mbstring.http_input = pass
mbstring.internal_encoding = none
mbstring.detect_order = no value

新サーバー
mbstring.http_input = pass
mbstring.internal_encoding = auto
mbstring.detect_order = auto

各項目の意味は、
mbstring.http_input : HTTP 入力文字エンコーディングのデフォルト値を定義します。
mbstring.internal_encoding string : 内部文字エンコーディングのデフォルト値を定義します。
mbstring.detect_order string : 文字コード検出のデフォルト値を定義します。
まぁよくわかんないですよね。
新サーバーではautoという設定が目に付きますが、autoというのは便利なようで、
非常に厄介です。「自動判定」というより「勝手に解釈」と訳した方がぴったりですね。
この設定を変更する必要があるようです。
設定を変更はphp.iniファイルに対して行ないますが、
レンタルサーバーの場合、ここのファイルを触ることは許可されませんから
ホームページエリアに「.htaccess」のファイルに記述を追加して設定を反映します。
ファイル名「.htaccess」
php_value mbstring.http_input pass
php_value mbstring.internal_encoding none
php_value mbstring.detect_order EUC-JP,UTF-8,SJIS,JIS,ASCII

これで文字化け解消です。
ちなみに
mbstring.http_input 、internal_encoding は必須ですね。
detect_order は今回は設定しなくても正常に表示されましたが、
デフォルトのautoでは、1バイト文字(ASCII、JIS)が最初に来るようですね。
これはいずれにしても好ましくない(色々なシーンで文字化けしやすい)ので変更していきましょう。
detect_orderの順序について
参考にしたサイトでは、UTF-8,SJIS,EUC-JP,JIS,ASCII という順番だったのですが、
設定すると表示のレスポンスが落ちてしまいました。
設定しているEC-CUBEはEUC-JPのキャラクタを使用しています。
EUC-JP,UTF-8,SJIS,JIS,ASCII
そこでEUC-JPを一番最初に持ってきたところ、妙な遅さはなくなりました。
体感できるほど差が出るものなのか?という点を追求する時間的余裕はないのですが、
参考までに。

コメント

タイトルとURLをコピーしました