CakePHPを入れてこれまでいろいろやってきました。日本語の文字コードについては何も考えずにやってきていたので,これをいろんな所で推奨されているようにUTF-8にしてみようと思い立ちました。
その前に現状はどうなっていたかというと,どうもShift-jisで全部やっていたみたい。(みたいなんです)
最初に文字化けしたのは,layoutを作ってそのファイルをutf-8エンコードで保存したとき。
文字化けの原因には,CakePHPだけじゃなくPHPの設定やMySQLの設定にも関係していますので,どこが牽引やらわかりません。何をやっても「また化けた・・・orz」の繰り返しでした。
MySQLのデフォルトをUTF-8にするとよいのか?
my.cnfに
default-character-set = utf8
を書きまくれという指示があったのでやってみました。
phpMyAdminで見てみると,照合順序がLatinなんやらになっているのがわかりました。そこでデータベースを削除して新たに作成,デフォルトの照合順序をutf-8にしてからデータベースを作成して
php.iniをさわる
php.iniの[mbstring]セクションに
mbstring.language = Japanese
mbstring.internal_encoding = UTF-8
mbstring.http_input = auto
mbstring.http_output = UTF-8
mbstring.encoding_translation = Off
mbstring.detect_order = auto
かわらなかった。
database.phpにエンコードのパラメータを記述する
var $default = array('driver' => 'mysql',
'connect' => 'mysql_connect',
'host' => 'localhost',
'login' => 'root',
'password' => '',
'database' => 'time_card',
'encoding' => 'utf8',
'prefix' => '');
これは効いたみたい。
そして,default.thtmlに次の行を追加
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
これで文字化け解消しました。でも本当はここは,CakePHP的にはヘルパーを使って次のようにするべきなのですね。
<?php echo $html->charset("utf-8");?>
なんだか,いろいろなことをやり過ぎて,本当はしなくても良いことまでやったのかもしれません。またdbに記録する文字コード体系と,表示の文字コード体系が違うものではいけないのかなど,不明な点が多くあります。文字コードについては今後も研究課題にしたいと思います。
追記
およそのからくりがわかりました。続・CakePHPと文字化けにそのあたりの話を書きました。