XPressME Integration Kit

ブログ

XPressMEデータベース、EUC-JPからUTF-8への変換

EUC-JPベースからUTF-8への移行で、もっとも面倒なのが、データベースのUTF-8化ですね。

通常は、

  • phpMyAdminでデータベースをエクスポート。
  • テキストエディタで、「DEFAULT CHARSET=euc-jp」の部分を 「DEFAULT CHARSET=utf8」に一括置き換え
  • テキストエディタで修正後の保存時、文字コードをUTF-8N(UTF-8 BOM無し)で保存

という作業になりますが、

WordPressの場合は、オプション設定値などの配列データを、serialize()してデータベースに格納しているため、上記以外に、ちょっとした、面倒な作業が必要となります。

たとえば オプション値に「管理人」という値が設定してあるとき、serializeされたデータは

「s:6″管理人”」とかになります。この「S:6」という部分は文字列で6バイトという意味を持っており、unserialize()時の文字切り出し数として使われます、

ところが、EUC-JPでは、「管理人」は6バイトですがUTF-8では9バイトになりますので、データベース上の該当部分の修正が必要になるんです。(めんどくさ)

ならば、ツールを作っちゃえというのが、今回の発想です。

ベースとなるプラグインは、

WordPress Database Backup Ver2.2.2で、

これに

という設定項目を追加したものを作成してみました。

「EUC-JPからUTF-8への変換」オプションはWordPressの設定言語がEUC-JPの場合のみ表示されます。

EUC-JPからUTF-8への文字コード変換部分は「PHPで、いわゆる機種依存文字の文字コード変換(EUC-JP→UTF-8)にはまる」の記事を参考に

$query_line = mb_convert_encoding(mb_convert_encoding($query_line,"sjis-win","EUC-JP"),"UTF-8","sjis-win");

で実現しております。

また、日本語文字列のバイト数取得は

日本語文字列のバイト数取得にstrlenだけではダメな理由 -PHP」の記事を参考に

$volm = strlen(bin2hex($data)) / 2;

で取得しました。

作成したプラグインは、XPressME Integration Kit  Ver2.3より/extras/wp_plugin/xpressme-backupに収納される予定です。

コメントをどうぞ