CakePHPは非常に良くできたPHPフレームワークです。
DBの種類等も設定ファイルに少し書いてやるだけで動いてくれます。
文字コードもそうで下記設定ファイルに書くだけです。
MySQLでEUC-JPを扱う場合も下記のようにするだけです。
/app/config/database.php
'mysql',
'persistent' => false,
'host' => 'localhost',
'port'=>3306,
'database' => 'dbname',
'login' => 'dbuser',
'password' => 'dbpassword',
'prefix' => '',
'encoding' => 'ujis',
);
}
?>
MySQLの場合はここで設定したencodingを使って、「SET NAMES ujis;」を自動的に発行してくれています。ここで問題が発生したのですが、MySQL4.0系にはSET NAMES構文がないので文字化けしてしまいます。CakePHP側もEUC-JPにしてしまえばいいのですが、今回はUTF-8である必要があり、DBとの入出力の際に、UTF-8⇔EUC-JPと変換することにしました。CakePHPはデータ操作の際に呼ばれるコールバック関数がありますので、そこで変換してやればOKです。
基本的に全ての生成されたModelはAppModelクラスを継承していますので、このクラスで変換してやります。
/app/config/app_model.php
data配列をEUC-JPに変換する処理
return true;
}
}
?>
もっと根っこのところで変換かけても良いのでしょうが、今回はCakePHPのライブラリには手を加えたくなかったので、こうしました。子クラスで上記関数をオーバーライドしている場合は親の関数を呼ぶのをお忘れなく。こうしたほうが良いというのがあればツッコミお待ちしてます。
タグ: CakePHP