CakePHPと文字化け

user-pic
0

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と文字化けにそのあたりの話を書きました。

トラックバック(0)

トラックバックURL: http://php.sunvisor.net/mt/mt-tb.cgi/52

コメントする

このブログで公開した情報は,のちほど Sunvisor Lab. CakePHP のコンテンツにまとめていますので,そちらも参照してみてください。

オススメの本

CakePHP初の公認ガイドブック。まずこれを読む。

CakePHPでの開発の際には常に机上に準備するべし。

CakePHP 1.2を使い始めるならこの本が必携。

CakePHP 1.2での実践が理解できる。

このブログ記事について

このページは、Sunvisorが2007年11月12日 17:00に書いたブログ記事です。

ひとつ前のブログ記事は「さらにEclipseの設定」です。

次のブログ記事は「CakePHPガイドブック」です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。