2006年06月19日(月)
phpMyAdminのエクスポートで文字化けする対策 [無料家計簿]
無料家計簿ではレンタルサーバを使用する都合上、データベースのメンテナンスはphpMyAdminで行う事となる。
ローカルで開発・設定したデータをテキストファイル(またはテキストを圧縮したファイル)にしてアップロードを行う。
しかし、出来あがったテキストを見てみると、みごとに文字化けをしている。
ググってみると、かなりの人が同様の現象で悩んであきらめていた。
しかし、なんとか対応出来たので、その方法を公開しよう。
原因を調べる
漢字変換は mb_convert_encoding() で行っていると推測して、すべてのスクリプトで mb_convert_encoding を検索してみた。
実際に使っているのはこのスクリプト。
phpMyAdmin/libraries/kanji-encoding.lib.php
この中の PMA_kanji_str_conv() で使っている。
$dist = mb_convert_encoding($str, $enc, $nw);
ここで $nw は変換元の文字コードで、
$nw = mb_detect_encoding($str, $enc_list);
で取得している。
$enc_list はグローバル変数で、文字コードの検出順を指定している。
ははーん。どうやら文字コードの検出順がおかしいんだな。
対策する
グローバル変数 $enc_list を設定しているのは、同じこのスクリプト。
phpMyAdmin/libraries/kanji-encoding.lib.php
この中の以下の関数で設定している。
PMA_internal_enc_check()
PMA_change_enc_order()
更新日付は 2003/11/26。このころはまだ UTF-8 は今ほど普及していなかった。修正個所では、検出順に含まれてすらいなかった。
あきらは以下のように修正して対応できた。各自の環境に合わせて調整する必要があるかもしれない。
// $enc_list = 'ASCII,SJIS,EUC-JP,JIS';
$enc_list = 'UTF-8,EUC-JP,SJIS,JIS,ASCII';根本対策
レンタルサーバの事業者の方、どうか上記対策を行ってください。
いまどき、ブログもMySQLを使うんですよ。
レンタルサーバで困っている方は、管理者を説得して上記対策をしてもらおう。
phpMyAdmin のHTMLは UTF-8 で書き出されているので、内部的に全て UTF-8 に統一すべきだろう。
読み出したデータは全て UTF-8 に変換する。
また、書き出すデータは全て UTF-8 から変換する。
手間かもしれないが、あたりまえの事だ。
文字コードの自動判別をやめて、上記 $nw を 'UTF-8' 固定にすべきだ。
Posted by あきら at 05時26分 トラックバック ( 1 ) コメント ( 0 )
トラックバック
トラックバックURL
http://akira.matrix.jp/tb.php?ID=57
phpMyAdminエクスポート時の文字化けを解消
phpMyAdminでUTF-8のデータをSJISでエクスポートしようとしたとこ...