CakePHPの日本語関係の設定

CakePHP 1.1で日本語を使うときに気をつける点は以下のとおり.ここでは文字エンコーディングにUTF-8,データベースはMySQLを使うこととする.なお,6や7の設定がしてあれば3や4の設定は無意味である,というように以下のすべての設定が必要というわけではない.

  1. 作成するファイルの文字エンコーディングをそろえる
    日本語を含むファイルの文字エンコーディングはすべてUTF-8に統一する.例えば編集にEclipseを使っているなら,メインメニューの[Window]>[Preferences]を選択し,[General]>[Workspace]ページの[Text file encoding]で"UTF-8"を選択しておく.
  2. 出力されるHTMLファイルで文字コード宣言をする
    出力されるHTMLファイルの<head>内で文字コード宣言がされるように,app/views/layouts/配下のthtmlファイルの<head>要素を以下のようにする.
  3. <head>
    <?php echo $html->charset('UTF-8')?>
    <!-- その他のコード -->
    </head>

    これにより,出力されるHTMLファイルに以下の文字コード宣言が出力される.出力されるHTMLファイル中のすべての日本語が文字コードの宣言より後に来るように注意する.HTMLコメントも含めて,文字コード宣言より前に日本語を使うと文字化けの原因となる.

    <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <!-- その他のコード -->
    </head>

  4. 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' => '');
  5. 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;
    }
  6. 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
  7. php.iniを編集する権限がない場合,.htaccessまたは各PHPスクリプトで文字エンコーディングの設定をする.詳細は日本語文字セットの設定を参照.

  8. MySQLの文字エンコーディングの設定をする

    my.cnfを以下のように設定する.default-character-setはMySQLサーバが使用するデフォルトの文字エンコーディングを,skip-character-set-client-handshakeはクライアントからの文字エンコーディング情報を無視してサーバのデフォルトの文字エンコーディングを使うように指示する.

    [mysqld]
    default-character-set=utf8
    skip-character-set-client-handshake
  9. 使用するテーブルの文字エンコーディングをそろえる

    使用するテーブルの文字エンコーディングをUTF-8に設定する.

    image

  1. コメントはまだありません。

  1. トラックバックはまだありません。