EC-CUBE で文字化けする場合の 3 つの対応方法


[初回公開] 2008年02月22日

EC-CUBE をサーバにインストールしてデフォルトのサンプルサイトや管理画面をブラウザで表示した際に文字化けしたいた場合に考えられる 3 つの原因と正常に文字化けせず日本語が表示されるようにする対応方法について紹介する。

EC-CUBE で文字化けする場合の対応方法




1.EC-CUBE が文字化けする原因


EC-CUBE が文字化けする原因は主に次の 3 つとなり、配布されている EC-CUBE のソースコードとブラウザに出力する Content-Type が UTF-8 になっているのに対して、データベースやサーバ側の設定が UTF-8 になっていないことが挙げられる。

・原因1.データベースの文字コード設定が UTF-8 ではない
・原因2.作成したテーブルの文字コードが UTF-8 ではない
・原因3.PHP の文字コードが UTF-8 ではない

以降ではそれぞれの原因の状況と対応方法について解説する。



2.原因1.データベースの文字コード設定が UTF-8 ではない


MySQL や postgreSQL といったデータベースは基本となる文字コードを保持しており、その文字コードが UTF-8 以外になっている場合は EC-CUBE のプログラムがデータベースへ読み書きする際に文字コードの不一致を起こして文字化けの事象が発生する。

MySQL の場合はサーバにある my.ini ファイル内の default-character-set の項目が UTF-8 になっているか確認し、なっていなければ次のように設定して MySQL を再起動する。

[mysql]
default-character-set=utf8


また、postgreSQL は後述のテーブルごとに文字コードが設定できるため、postgreSQL 自体には文字コードの設定は持っていない。



3.原因2.作成したテーブルの文字コードが UTF-8 ではない


データベースは基本となる文字コード以外に、作成するデータベースやテーブルごとにも文字コードを持つことができ、その文字コードが UTF-8 以外だと文字化けの事象が発生する。

MySQL で作成したデータベースの文字コードがどのようになっているか確認する場合は下記のコマンドで確認することができる。
下図では latin1 になっているので文字化けが発生する。

show variables like "char%";


MySQL でデータベースの文字コードを確認


テーブルごとに文字コードを UTF-8 にしたい場合は次のコマンドで変更することができる。

ALTER TABLE {テーブル名] CONVERT TO CHARACTER SET utf8;


また、postgreSQL の場合はデータベース作成時に下記のように文字コードを指定して作成するとよい。

CREATE DATABASE {データベース名} ENCODING = 'UTF8' ・・・




4.原因3.PHP の文字コードが UTF-8 ではない


PHP が動作する場合は設定ファイルとなる php.ini に記載されている内容に沿って動作するため、この php.ini の文字コードが UTF-8 以外になっていると UTF-8 で保存されている EC-CUBE のプログラムと不一致を起こして文字化けすることがある。

php.ini で下記の設定項目を確認し、文字コードが UTF-8 以外になっている場合は変更する。

default_charset = "UTF-8"
mbstring.detect_order = UTF-8,EUC-JP,SJIS,JIS,ASCII


EC-CUBE の旧バージョンでの文字化けの注意点


EC-CUBE のプログラムはバージョン 2.0 系以降は UTF-8 になっているが、それ以前のバージョン 1 系は EUC-JP になっているので、前述したデータべースや php.ini の文字コードを確認する場合は、EC-CUBE のバージョンにも注意が必要である。

もしバージョン 1 系を使うのであればmデータベース作成時など EUC-JP に指定すると解決する。

関連記事