EUC-JPで運用しているWordPressをExportするとCDATAが文字化けする件の対応

 現在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で運用するに限るということに尽きますね(結局)。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です