モンスターカレンダー

« 2006年2月 »
12345678910111213141516171819202122232425262728

ケータイ(モバイル)サイト構築ではまる:文字化け

| コメント(0)

ケータイ(モバイル)サイトを本格的に開発し始めた。実機でテストするにつれ、いろいろとつまづきが...
まず王道、文字化け。

PC向けのサイトを、PHPスクリプト・Smartyファイル・outputのencoding 全て
EUC-JPで作成していて、これはこれで何も問題はなかった。

<php.ini>
mbstring.encoding = EUC-JP
mbstring.http_input = auto
mbstring.http_output = EUC-JP
mbstring.internal_encoding = auto

ケータイサイトは同じサーバで、同じく内部エンコーディングはEUCで、入出力のみShift_JISとして開発。
スクリプトの初期に

mb_http_output("SJIS");
ob_start("mb_output_handler");

を指定し、ごく普通の表示ページは問題なし。
しかし、inputなど、formの入力要素が出てきた時に文字化け。
Smarty、HTML_QuickFormを使用していたため、この辺りに問題あるのか?とソースを追ってみたり。
Smartyのoutput_filterで出力コンテンツをSJISにしてみたり、
$_POSTをEUCやらSJISやら、いろいろと変換したり。
しかし、NG。何をどうしても一度Submitした後のエラー表示でQuickFormがセットする inputのvalue値がEUCのまま...(他の表示部はSJIS)

最後の手段、PHPのMLに投げようとメールを書きかけ、phpinfo()をもう一度見てみると

「mbstring.encoding_translation None」

今まで気にしていなかった設定項目が。
「入力される HTTP クエリに関して、 文字エンコーディング検出および内部文字エンコーディングへの変換を行う 透過的な文字エンコーディングフィルタを有効にします。 」

Onにして、Apache 再起動。すると、あっさりと文字化けは解決したのだった。脱力...

これは「他人に客観的に説明しているうちに解決」ということにしておく。

コメントする