Java で書かれた PHP 互換処理系として Quercus というものがあります。PHP で書かれたアプリケーションを Java アプリケーション サーバー上で動作させることができるというものですが、実はこのブログを書いている WordPress も Quercus 上で動かしていたりします。
実のところ WordPress を Quercus で動かすためには、いくつか越えなければいけないハードルがあったわけなので、そのいくつかをここに記しておきます。
文字化け
最初に気が付くのはやはり文字化けでしょう。これにはいくつか理由が挙げられますが主なものは次の二つです。
- PHP が基本的にマルチバイト文字列であるのに対して Java は UTF-16 を使っている。
- WordPress が MySQL に特化していることにより JDBC との不整合がある。
最初のものは WEB-INF/php.ini (Quercus の php.ini ファイル) で unicode.semantics = 1 として PHP6 のように Unicode を使うように指定することで回避することができる場合もありますが、PHP6 はキャンセルになった模様ですし、別のところで問題が出る可能性があるのでここでは使いません。代わりに、Java を騙して UTF-8 マルチバイト文字列を ISO-8859-1 だと思わせる方法を取ります。そのために WEB-INF/php.ini ファイルで mbstring.internal_encoding = UTF-8 と指定します。
しかしこれだけでは JDBC ドライバーが勝手に Unicode に変換して MySQL テーブル上で文字化けを誘発しますので、もう一手売っておく必要があります。何をするかというと、MySQL の JDBC クライアントのプロパティで characterEncoding=ISO8859_1 と指定するだけです。
こんなことをすると普通なら逆に文字化けを引き起こしそうなものですが、WordPress の MySQL 特化設計のおかげで、MySQL サーバー側には適切なエンコーディングが設定がされるので、JDBC ドライバーは何も知らずにバイト列を素通してしまって文字化けが回避されるという望ましい結果が得られます。
ほかにも手間取りそうなところはありますが、今回はここまでとします。