続・CakePHPと文字化け

user-pic
0

過去のエントリ CakePHPと文字化け において

なんだか,いろいろなことをやり過ぎて,本当はしなくても良いことまでやったのかもしれません。またdbに記録する文字コード体系と,表示の文字コード体系が違うものではいけないのかなど,不明な点が多くあります。文字コードについては今後も研究課題にしたいと思います。

と研究課題にすることにしたのですが,今回文字化け解消の方法を再度実験してみました。MySQLの4.1以降では文字コードの自動変換機能が実装され,逆にそのために文字化けに悩まされることが多くなったとの情報を得ました。また,PHPの文字コードの扱いについても色々と調べてみました。

参考サイト

サイトで使用するエンコードを決定する

CakePHPシステムの中でどのエンコードを使用するのかを決定します。MySQLのテーブルにどのエンコードでデータが格納されているかは,この際あまり問題ではないようです。サイト内で利用されているエンコードと,MySQLに接続するときのクライアント文字セットが一致していればいいようです。今回はこのテストをするに当たり,文字セットがEUC-JP,Shift-JIS,UTF-8の3種類のフィールドを持つテーブルを作って,そのテーブルにデータの追加,編集を行うCakePHPコントローラを作成してテストしました。

ファイルのエンコードを揃える

特にビューファイル(default.thtmlを含むthtmlファイル)に日本語を含む場合のファイルのエンコードはすべて決定したエンコードを使用します。Eclipseを使用している場合は,ワークスペースのエンコードを指定しておきます。 (Eclipseではeuc-jpとかは指定できないみたいですが)

これがばらばらですと,ビューの表示内容が部分的に(あるいは全体に)文字化けしたりします。

レイアウトでエンコードを指定する

dafault.thmlなどのLayoutファイルではhead部分に$html->chasetメソッドを使って決定したエンコードを指定します。

<?php echo $html->charset("utf-8");?>

ページのエンコードをこのようにちゃんと指定していれば,ブラウザがエンコードを間違えることもありません。

データベースのクライアント・エンコードを指定する

MySQLのSET NAMES でクライアントのエンコードをサイトのエンコードと一致させる必要があります。CakePHPではdatabase.phpに,encodingオプションを追加することでエンコードをセットすることができます。この機能を使って決定したエンコードを指定します。 

    var $default = array('driver' => 'mysql',
                                'connect' => 'mysql_connect',
                                'host' => 'localhost',
                                'login' => 'root',
                                'password' => '',
                                'database' => 'encodetest',
                                'encoding' => 'utf8',
                                'prefix' => '');
 

ここで指定するエンコードの表記方法は,MySQLの文字セット名です。EUC-JPはujis,shift-jisはsjis,utf-8はutf8となります。僕は,ここで間違ってutf-8と指定して文字化けが解消せずにハマりました。(´・ω・`) バカですた。

しかし,SET NAMESは禁止というような話も聞くのですが,CakePHPではこれを使っているような気がするのですが,いいのかな。

とりあえず結論

これら3つのエンコードを揃えておけば文字化けはしないようです。EUC-JPとUTF-8で確認しました。Shift-JISではチェックしていませんが,いけるんと違いますやろか。ただし僕はEclipseを使っている関係で,サイトのエンコードはUTF-8がお勧めだと思っています。php.iniやmy.cnfはインストールしたときのまま何もさわっていませんが,文字化けせずに使用できています。

トラックバック(0)

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

コメント(2)

| コメントする

>ここで間違ってutf-8と指定して文字化けが解消せずにハマりました

同じくハマりましたが、こちらのサイトに助けられました…(t-t

ありがとうございます。

>迷い人さん
同じところにハマった人がいた!このサイトが役に立ったのならうれしいです。

コメントする

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

オススメの本

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

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

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

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

このブログ記事について

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

ひとつ前のブログ記事は「MS-SQLへの接続」です。

次のブログ記事は「複数のappフォルダ」です。

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