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’ 固定にすべきだ。


“phpMyAdminのエクスポートで文字化けする対策” への3件の返信

  1. とても助かりました!

    ありがとうございます。

    私の場合は、吐き出したEUCが部分的に文字化けする症状でした。

コメントを残す

メールアドレスが公開されることはありません。

*

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください