2008/02/11

Modxの文字化けを解消する方法

modx

現在構築中のWebサイトのCMSにModx(version 0.9.6.1)を導入しているのですが、ローカルで構築したxampp上のModxのデータベースをlolipopに移そうとすると、どうしても文字化け状態で出力されてしまう。ローカルでは文字化けしてないのに。なんで?なんで?なんで?

普通なら

  • phpMyAdminを用いてデータベースをエクスポート
  • それをlolipopのphpMyAdminからインポート

するだけなのに、どーもこのままでは見事に文字化けしてしまって上手くいかない。Modx経由でエクスポートしたり、EUC,SJISエンコードに変換してみたり、エクスポートファイルをUTF8に変換してみても全く意味がなし・・・う~ん・・・このままじゃ安心してバイトにもいけません。

数時間ほど格闘した結果、どうやらphpMyAdmin経由でMySQLのエクスポートを行うとphpMyAdminが『親切なことに』テーブルに設定してある照合順序の文字コードに変換して出力してくれるらしいことが判明しました(自分の場合はLatin1でした)。

つまり自分の場合ですと、phpMyAdmin側からするとエクスポートの際、

  • Latin1の文字をUTF-8に変換してくれている

はずなのに、実際はModx側のミス(といっても問題ないと思う)で、最初のデータベース作成の部分で照合順序にLatin1をデフォルトで指定してしまっているため、

  • UTF-8の文字をさらにUTF-8に変換する

という二重変換が行われていた結果、文字化けが生じてしまったらしい。よけいなことをー

それでこの問題をどうすればいいのか。だらだらと書いてきたけど解決方法は容易で、要は『変な文字コード変換をせずに生のデータ(バイナリ)を出力する』ようにすればよい。そうすればもともとデータベーステーブルにはUTF-8状態でデータが存在しているので、生の状態でもきちんとしたUTF-8の文章が出力されることになるはずです。

phpMyAdminはバイナリ状態でエクスポートすることはできないので、そのために今回は"MySQLDump"を使用して、コマンドプロンプトから

mysqldump -u root -p --compact --compatible=mysql40 --default-character-set=binary "データベース名" > "出力ファイル名"

注)--compatible=mysql40オプションはlolipopのMysqlのバージョンがローカルのより低かったからつけただけです。他のレンタルサーバ(xreaとか)はなくてもいいかも。

を実行!見事バイナリ形式で出力されましたので、これをlolipopにインポート。無事文字化けしないでデータベースがインポートされました。ふぅ。

Modxの文字化けに悩んで検索から飛んできた人はぜひ試してください~

0 件のコメント: