CakePHPの日本語関係の設定
CakePHP 1.1で日本語を使うときに気をつける点は以下のとおり.ここでは文字エンコーディングにUTF-8,データベースはMySQLを使うこととする.なお,6や7の設定がしてあれば3や4の設定は無意味である,というように以下のすべての設定が必要というわけではない.
- 作成するファイルの文字エンコーディングをそろえる
日本語を含むファイルの文字エンコーディングはすべてUTF-8に統一する.例えば編集にEclipseを使っているなら,メインメニューの[Window]>[Preferences]を選択し,[General]>[Workspace]ページの[Text file encoding]で"UTF-8"を選択しておく. - 出力されるHTMLファイルで文字コード宣言をする
出力されるHTMLファイルの<head>内で文字コード宣言がされるように,app/views/layouts/配下のthtmlファイルの<head>要素を以下のようにする. - database.phpでデータベースのクライアント・エンコーディングを指定する
以下のようにencodingオプションに’utf8′を指定する.’utf-8′ではなく’utf8′とハイフンが要らない点に注意.var $default = array('driver' => 'mysql', 'connect' => 'mysql_connect', 'host' => 'localhost', 'login' => 'root', 'password' => '', 'encoding' => 'utf8', 'database' => 'my_db', 'prefix' => ''); - CakePHPのmysql用文字エンコーディング設定メソッドを修正する
PHP5.2.3以上を利用できるのであれば,cake/libs/model/dbo_mysql.phpのsetEncoding()メソッド を以下のように修正する."SET NAMES"SQL文はSQLコンソールから呼び出すためのSQL文であり,アプリケーションから呼ぶとSQLインジェクションに対して脆弱になってしまうため.文字エンコーディングの指定にはPHP5.2.3で導入されたmysql_set_charset()を使う.function setEncoding($enc) { return mysql_set_charset($enc); // return $this->_execute(’SET NAMES ‘ . $enc) != false; } - PHPの文字エンコーディングの設定をする
php.iniで文字エンコーディングにUTF-8を使うように設定する.[PHP] default_charset = "UTF-8" [mbstring] mbstring.language = Japanese mbstring.internal_encoding = UTF-8 mbstring.http_input = auto mbstring.http_output = UTF-8 mbstring.encoding_translation = On mbstring.substitute_character = none
-
php.iniを編集する権限がない場合,.htaccessまたは各PHPスクリプトで文字エンコーディングの設定をする.詳細は日本語文字セットの設定を参照.
- MySQLの文字エンコーディングの設定をする
my.cnfを以下のように設定する.default-character-setはMySQLサーバが使用するデフォルトの文字エンコーディングを,skip-character-set-client-handshakeはクライアントからの文字エンコーディング情報を無視してサーバのデフォルトの文字エンコーディングを使うように指示する.[mysqld] default-character-set=utf8 skip-character-set-client-handshake
- 使用するテーブルの文字エンコーディングをそろえる
使用するテーブルの文字エンコーディングをUTF-8に設定する.
<head>
<?php echo $html->charset('UTF-8')?>
<!-- その他のコード -->
</head>
これにより,出力されるHTMLファイルに以下の文字コード宣言が出力される.出力されるHTMLファイル中のすべての日本語が文字コードの宣言より後に来るように注意する.HTMLコメントも含めて,文字コード宣言より前に日本語を使うと文字化けの原因となる.
<head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <!-- その他のコード --> </head>
コメントはまだありません。