現在XServerの方で運用しているWordPressはやんごとなき事情でEUC-JPで運用しているのですが、サーバ移転に伴いUTF-8が普通に使えるサーバに引っ越すことになりました。
WordPressを移転する時にはデータをエクスポート→インポートするのが一番簡単なのですが、しかしWordPressをEUC-JPで運用している場合、エクスポート機能を使うとCDATAの中身が文字化けしてしまうという現象が発生します。割と既知のバグらしい。
対応としてはphpmyadminから直接データをダンプするのが正解らしいのですが、「CDATAの部分だけ文字化けするなら、とりあえずその部分だけ何とかすれば良くね?
」みたいなノリでエクスポートしているところを調べてみたところ、
wp-admin/include/export.php より
function wxr_cdata($str) { if ( seems_utf8($str) == false ) $str = utf8_encode($str); // $str = ent2ncr(wp_specialchars($str)); $str = "< ![CDATA[$str" . ( ( substr($str, -1) == ']' ) ? ' ' : '') . "]]>"; return $str; }
が該当する処理を行っているところであることが判りました。
この関数の先頭2行が明らかにUTF-8に変換しているっぽいので、この2行の先頭に「//」をつけてコメントアウトしたところ、CDATAで文字化けを起こすことはなくなりました。
後はエクスポートしたXMLファイルの文字コードをUTF-8に変換+XMLファイルの先頭行の「encoding=”EUC-JP”」を「encoding=”UTF-8″」に書き換えて新しいWordPressにインポートすれば移行は完了する。はず(まだ未確認)。
今回の教訓は、WordPressはUTF-8で運用するに限るということに尽きますね(結局)。