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


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

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

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

1.EC-CUBE で文字化けする原因と対応方法

EC-CUBE が文字化けする原因は、主に文字コードが適切で無いことが挙げられる。
公開されている EC-CUBE のソースコードとブラウザで表示する文字コード(Content-Type)が UTF-8 になっているのに対して、データベースやサーバ側の設定が UTF-8 になっていないことが多い。



最新の EC-CUBE では文字コードが UTF-8 となっているので、データベースやプログラム(PHP)が UTF-8 になっているかが確認するポイントなる。

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

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

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

[mysql]
default-character-set=utf8

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

1-2.作成したテーブルの文字コードが UTF-8 ではない場合

MySQL などデータベースのサービス全体として文字コードの設定を行う以外に、個々に作成するデータベースやテーブルごとにも文字コードを持つことができる。
この時、文字コードが UTF-8 以外だと文字化けの事象が発生する。

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

> show variables like “char%”;



このコマンドで実際に MySQL のテーブルの文字コードを確認したところ、下図のように latin1 になっていると文字化けが発生する。

MySQL でデータベースの文字コードを確認している様子

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

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

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

> CREATE DATABASE {データベース名} ENCODING = ‘UTF8’ ・・・

1-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



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

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

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

関連記事

コメントを残す