PHPとMySQLに関する文字化けにまつわる私的体験談
MySQLやphpMyAdmin周りの文字化け関連の話題はよく聞きますが、些細なことではまっていたのでメモ。
概要
phpMyAdminから作成したデータベースにレコードを追加すると日本語が化ける。試行錯誤の結果、テーブルを作り直しただけでうまくいった。orz
- テーブルを作る
- レコードを追加する
- 化けてる
- いろいろいじくる(※2から4繰り返し)
としてたんですが、1にまで遡ったら、正常に表示されました。
環境
- レンタルサーバ:さくらインターネット
- PHP:5.2.10
- MySQL(サーバ):4.0.27
- MySQL(クライアント):4.1.22
- phpMyAdmin:2.11.9.5
詳細
文字エンコーディングはUTF-8。htmlソースをUTF-8で記述し、metaタグでも指定。
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
また、サイト全体に対する指定として.htaccessで以下のように記述し、httpレベルでのエンコーディング指定も行います。
AddType "text/html; charset=UTF-8" .html .php
php.iniは最終的に以下のような設定としました。
mbstring.internal_encoding = "utf-8" mbstring.language = "Japanese" mbstring.http_input = "utf-8" mbstring.http_output = "utf-8" mbstring.encoding_translation = On mbstring.detect_order = "utf-8" mbstring.substitute_character = none
「UTF-8」と「utf-8」は多分区別されないとは思いますが、phpinfo()で確認できる他の設定項目が小文字で「utf-8」となっていたので一応合わせておきます。
また、" "で文字列を囲っていますが、これも別に必要ないのかも。さくらインターネットのサーバコントロールパネルから見ることができるphp.iniの編集例が" "で囲ってあったので同じようにしてみました。
コントロールパネルのphp.ini編集用ウィンドウに上記設定を書き込み保存すると、所定の場所にphp.iniが生成されています。その状態でphpinfo()の内容を確認すると以下のようになっているはずです。
これでPHP側の設定は終わり。あとはphpMyAdminからエンコーディングの指定を確認します。
ログイン画面と、ログイン後すぐのトップ画面でエンコーディングが正しく指定されているか確認します。違っている場合は変更。