シェアする

  • このエントリーをはてなブックマークに追加

[EC-CUBE]文字化け対策

概要

現在開発中のサイトのEC-CUBEを2.3.1から2.3.3にアップデートしました。
実はこのアップデート、かなり導入を迷いました。

………

という話を本当は書きたかったんですが、この話をするにはもっと検証を重ねないと記録に残るような記事をかけそうに無いので今回はデータベースの文字化けについてだけ触れておきます。

2.3.3のファイルを開発中のファイルにそのまま上書き!してアップデートしてやりました。
これによって現在様々な障害が発生しておりますが、もちろんそれは想定の範囲内。直すのに骨は折れるけど。

アップデートによってインストールフォルダができますので、またインストール画面が立ち上がるわけですが、アップデートの場合はデータベースを初期化しないというチェックボックスにチェックを入れてインストールします*[1]
すると以前のデータベースデータはそのままですから、ちゃんと商品が残ったままアップデートできるわけです。当たり前だけど。

ここでやっと文字化けの話。
インストールを完了して管理画面に進むと、環境にもよると思いますがデータベースから取得したデータが文字化けしています。
おそらくこれは僕がデータベースの出力文字コードをちゃんと設定していないからだと思いますが、別にいいんです。
SET NAMESで文字コード指定してやれば。CakePHPも内部で同じやり方でエンコード指定してますし*[2]

文字化けの対策

EC-CUBEマニュアルサイト – EC-CUBE(2.x系)/1_インストール/01_サーバ設定方法

上記ページに書かれているとおりですが、メモ。

SC_DbConn.php

if(!isset($objDbConn->connection) || $new) {
if($dsn != "") {
$objDbConn = DB::connect($dsn, $options);
$this->dsn = $dsn;
// ↓ここに下記の2行を追加(utf8の場合)
// DBへの接続時に'SET NAMES utf8'を$objDbConnにexecuteしておくんだね。
// すると接続が維持される間は文字コードはutf8だぞって事になるんだね。
$buf = $objDbConn->prepare('SET NAMES utf8');
$objDbConn->execute($buf);
} else {
if(defined('DEFAULT_DSN')) {
$objDbConn = DB::connect(DEFAULT_DSN, $options);
$this->dsn = DEFAULT_DSN;
} else {
return;
}
}
}
  1. もしかしたらアップデートするときにわざわざインストールしなくてもいいのかな? []
  2. どこかでSET NAMESがセキュリティホールになりえるとか見たことある気もするけど具体的な記述を見たこと無いんだよなぁ。もしそんな問題があるとしたらCakePHPも使ってないよね?と思うわけ。 []

シェアする

  • このエントリーをはてなブックマークに追加

フォローする