Home > 備忘録 > xoopsでテスト環境を構築したが文字化けしていた

xoopsでテスト環境を構築したが文字化けしていた

  • 2009-03-25 (水) 11:58
  • 備忘録
  • 投稿者:hitotsu
xoopsのモジュール改造の仕事をいただいた。ありがたいことです。
まず、お客様のデータをいただきテスト環境を構築したが、気付いたことがあるのでメモ。
お客様の環境はphpスクリプト、MySQLデータベースともEUC-JP。

テスト環境はutf8、MySQLのデフォルトエンコーディングもutf8。
テスト環境でxoopsのindex.phpを実行すると、日本語文字がすべて「????」と文字化けしている。

お客様のphpスクリプトはEUC-JPのままコピーしている、テーブルデータはujis(EUC-JP)でインポートしている。

phpMyAdminでテーブル内容を確認する限り、問題なく日本語は読めている。

文字化けの原因は、(1)phpスクリプトか、(2)MySQLのエンコーディングと思われる。

(1)phpスクリプトはmbstring関係があやしいので、/index.phpから読み出している/mainfile.phpに次の文を追加してみた。

ini_set( “mbstring.language”, “Japanese” );
ini_set( “mbstring.internal_encoding”, “EUC-JP” );

変化はない。

(2)次にMySQL側を調べてみよう。以前SJISのデータを扱う時に
MySQLのクエリに実行の都度以下のようなコマンドを渡した記憶がかすかにある。

SET CHARACTER SET SJIS

Googleで「xoops 文字化け mysql」を検索してみると、まさにそのものという情報があった。

[XOOPSを引越ししたら文字化け]
http://blog.karakuriya.biz/xoops/000587.html

/class/database/mysqldatabase.php を修正するとよいらしい。
具体的な修正箇所は、236行目付近の
$result = & mysql_query($sql, $this->conn);
の上に
mysql_query(“SET CHARACTER SET ujis”, $this->conn);
を追加すること。

この修正でほぼ文字化けは解消した。

「ほぼ」と書いたのは、すべてのモジュールで直ったわけではないからだ。
一部のモジュールは相変わらず「????」のままなのだ。
今回の対象モジュールではないので、放置しておく。必要になった時に調べることにする。

おそらく/class/database/mysqldatabase.phpの「XoopsMySQLDatabase」クラスを利用せず、
独自にmysql_query()を利用しているのだろう。

さぁて、次はターゲットモジュールをすべて読むことにしよう。