UTF-8
2007年07月24日
WordPressでGoogle MapsなどのAJAXを利用しようとした場合、どうしても文字コードをUTF-8で作成しなければならない。
しかし、現在 BeLiveが借りているサーバ「CPI」では、内部文字コードはEUC-JP、データベースはujisの設定となっている。
そのため、2007年7月 現在は無理矢理WordPressのプログラムを変更して、UTF-8で使用できるようにした。
※詳しくは「びぃらいぶの記録」 2006年12月12日 「【技術メモ】WordPressをUTF-8でインストールする(完結編)」
しかし、このような使い方では以下のような弊害があった。
- プログラムの改変が前提になる
- バージョンアップ時に対応できるか不安がある
- プラグイン利用に不安がある。
- 表示文字コードのみの対応なので、検索等が追従できない。
そんなとき、通りすがりさんから有益な情報を得る。
ただ、検証することもなく、そのままにしていた。が...
とあるWEBシステムの作成を今頼まれている。
そのWEBシステムをどのCMSをベースに作るべきか...1ヶ月ほど悩んだ。
XOOPSで行くべきか?
GeekLogで行くべきか?
ショッピングカートに似ているから、ZenCartがいいか?
Jumulaやらいろいろとあるなぁ
もちろんMTも候補であったのであるが...
そしてGeekLogを導入してみてはと...試すことにした。
しかし、GeekLogはUTF-8環境でないと、まともに動かない。
またインストール手順がめちゃめちゃやっかい。
結局、EUC-JP環境でWordPressをCMSベースとして開発をはじめることにした。
しかし、やはり依頼主から「Google Maps」などのAJAXの利用を求められ、UTF-8環境下のWordPressを再度、検討しなければならなくなった。
実は、インストールがうまくいかなかったGeekLogは、ある副産物を残してくれた。
それはCPIのサーバでもUTF-8環境にすることができると言うことである。
詳しくは「[WordPress]CPIのサーバでUTF-8で設定する方法」を見て欲しい。
なお、この記事を書くにあたり、金内氏のブログ「我流天性 - がらくた屋」の記事を参考にさせて頂いた。感謝感謝
これにて
【技術メモ】WordPressをUTF-8でインストールする(その1)
【技術メモ】WordPressをUTF-8でインストールする(完結編)
と続けてきたが、この記事にてこの件は一段落としたいと思う。
さあ、これでWordPressの道が大きく開けた。
次回は今まで作り貯めてきたプラグインを公開したいと思う。
続きを読む2006年12月12日
さて、前回の続きですが...
直す方法を見つけました!!
※2006.12.13 WordPressのユーザフォーラムにて指摘を受けました。
この方法MySQLが4.0x下での対応方法のひとつです。
もう一度、前回のおさらい
内部コードがEUC-JPのレンタルサーバにて、WordPressをUTF-8で扱いたい場合の対処方法をいろいろなサイトや掲示板を参考にして自分なりに直してみました。
どうしてもGoogle MapsやAmazonを使ってみたかったので...
原因は内部文字コードがEUC-JPであること。
私のサイトはCPIでPHPは標準で4.4.1です。
MySQLは4.0と5.0が使えるます。
ただMySQLの4.xだとphpMyAdminからclient_charsetにはUTF-8を指定できませんでした。
MySQL5.0だとUTF-8を指定できるのですが、WordPress自体エラーを頻発します。
そのため、MySQL4.xで続けることにしました。
なお、WordPressはMEの2.0.5です。
ここまでが、前回の条件でした。
※上記でMySQL5.0でエラーが起きるようなことを書きましたが、あくまでも私の調べた状況下での結果です。
すべてにおいて起こるわけではありません。
それで、前回はwp-includes/wp-db.phpに無理矢理、UTF-8に変換する部分を付け加えました。
【問題提起】
この方法では、実は解決に至りません。
以下のような問題が残っているのです。
- [表示]-[テーマエディタ]などのデータベースではなく、ファイルを編集するページでは対応不可能。
- プラグインによっては、対応できない。
(「seo-title-tag」プラグインでは文字化けした)
といったところです。
となると、wp-includes/wp-db.phpは一時的なものになります。
可能性から考えると、POSTされた値をUTF-8として扱わなければならないわけです。
各ソースを調べると...すべてPOSTされた値を直接使っていました。
そのため、すべてに文字コード変換を入れることは無理。
しかも、新しいプラグインやテーマを適用させた時には、それらにも対応させなければなりません。
このままでは、直すことは困難です。
でも、直す方法を見つけました。
2006年12月10日
内部コードがEUC-JPのレンタルサーバにて、WordPressをUTF-8で扱いたい場合の対処方法をいろいろなサイトや掲示板を参考にして自分なりに直してみました。
どうしてもGoogle MapsやAmazonを使ってみたかったので...
※2006.12.12 この方法は一時的なものなので、このあとの記事を参考にしてください。
【技術メモ】WordPressをUTF-8でインストールする(完結編)http://blog.belive.jp/archives/50862109.html
原因は内部文字コードがEUC-JPであること。
私のサイトはCPIでPHPは標準で4.4.1です。
MySQLは4.0と5.0が使えるます。
ただMySQLの4.xだとphpMyAdminからclient_charsetにはUTF-8を指定できませんでした。
MySQL5.0だとUTF-8を指定できるのですが、WordPress自体エラーを頻発します。
そのため、MySQL4.xで続けることにしました。
なお、WordPressはMEの2.0.5です。
PHPの設定オプションを変更するには、.htaccessにphp_valueなどを書き込む方法があります。
しかしCPIでは、.htaccessにphp_valueなどを入れるとエラーになるので、wp_config.phpに同じような条件を入れることにしました。
いろいろと試したところ、次のようにしたらうまくいきました。
まずはWordPressそのものは、インストール時に「UTF-8」でインストールします。
(すでにEUC-JPで作成されている方は、必ずDBのバックアップをとってください。一度消したのちの再インストールです。)
でないとユーザの権限などが化けます。
MySQLのテーブルを調べてみると、MySQLの内部コードがEUC-JPでもUTF-8で無理矢理登録してやれば上手くゆくようです。
そのため、インストール時に「UTF-8」にする必要がありました。
一旦、インストールしたらwp-config.phpを編集します。
【オリジナル】
mb_language("Japanese");
mb_internal_encoding("UTF-8");
【編集後】
ini_set("output_buffering","on"); //2006.12.09 add
ini_set("mbstring.encoding_translation","off"); //2006.12.09 add
ini_set("output_handler","mb_output_handler"); //2006.12.09 add
ini_set("default_charset","UTF-8"); //2006.12.09 add
mb_language("Japanese");
mb_internal_encoding("EUC-JP");
ini_set("mbstring.http_output","UTF-8"); //2006.12.09 add
ini_set("mbstring.http_input","auto"); //2006.12.09 add
ini_set("mbstring.substitute_character","none"); //2006.12.09 add
これは.htaccessに同じように書いても同様であると思います。
では、問題は何か?
どうやら、POSTされた変数が内部コードのEUC-JPになっていて、MySQLに書き込まれる際にEUC-JPで書き込まれることです。
書き込まれたデータが、UTF-8で取り出されれば良いのですが、取り出すときもEUC-JPのままです。