EC-CUBEのエンコード対策

サーバ移転や、試験環境などの構築で、文字化けが発生することがしばしばある。
データベース接続まわりを除いてみると、大切な記述が欠けている。

オープンソースなので、完璧を求めてはいけない。
ファイル名: /data/class/SC_DbConn.php
65行付近

$this->conn = $objDbConn;
<span style="color: #3366ff;">$this-&gt;conn-&gt;query(”SET NAMES utf8″);</span>
$this-&gt;error_mail_to = DB_ERROR_MAIL_TO;
$this-&gt;error_mail_title = DB_ERROR_MAIL_SUBJECT;
$this-&gt;err_disp = $err_disp;
$this-&gt;dbFactory = SC_DB_DBFactory_Ex::getInstance();

「$this->conn->query(”SET NAMES utf8″);」を追記すれば解決する。

※ この作業を行うタイミングが重要です。
インストールのどのタイミングで行うか、DB接続直後です。
最近のバージョンはやり方が違う。
一度インストールし、上記エンコード指定をした後、再度インストールする。
このときデータベースが存在するので削除するかと聞いてくるので、削除する。
これでよいのだが、既にデータを登録しているときは消えてしまうので注意が必要だ。
注意
エンコード関連を変更した後は、キャッシュファイルのクリアを忘れるべからず。
(/data/chash)

解説
php.ini のエンコード関係は、あまり指定しないのがサーバー屋の流儀である。
その場合、データベースの読み書きは、サーバーのデフォルト・エンコードで行われる。
サーバーのエンコードは、
最近は、UTF-8が多くなってきたが、以前はEUCが主流だった。
DBのエンコードとPHPファイルのエンコードが同じであっても、文字化けが発生する場合は、サーバーのデフォルトエンコードを疑うのが基本である。

エンコードをきちんと理解しないで安易にまねすると、復旧不可能に陥ります。

ご自身の責任で行ってください。

コメントを残す