« MS-SQLへの接続 | メイン | 複数のappフォルダ »

続・CakePHPと文字化け

過去のエントリ 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はインストールしたときのまま何もさわっていませんが,文字化けせずに使用できています。

« MS-SQLへの接続 | メイン | 複数のappフォルダ »

関連するエントリー

トラックバック

このエントリーのトラックバックURL:
http://mt.sunvisor.net/mt-tb.cgi/58

コメントを投稿

About

2007年11月22日 09:40に投稿されたエントリーのページです。

ひとつ前の投稿は「MS-SQLへの接続」です。

次の投稿は「複数のappフォルダ」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

CakePHP初の公認ガイドブック。高速開発を「PHPらしく」実現するフレームワークを導入から実践、拡張まで徹底解説。

2008年09月

  1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30        

最近のコメント

最近のトラックバック

Powered by
Movable Type 3.35