« 動的ページを静的URLで表示させる(PATH_INFO使用) | メイン | コマンドプロンプトを使わないで、さくらへPEARをインストール(Go-PEAR使用) »

携帯サイトで文字化け

070707.gif  
EUC-JPでパソコン向けに構築したサイトを携帯表示へ対応作業中、文字化けに悩まされる、、ありがちですw

携帯電話はShift-JIS以外の文字コードへ未対応の機種が多い為、必然出力をShift-JISへ統一してやる必要がある。今回はパソコン向けに制作したEUC-JPのDB・PHPスクリプト・Smartyテンプレファイルをそのまま使用しつつ、出力のみShift-JISへ変更してやるということになる。以下のサイトを見つけ、参考に諸所作業。
→ケータイ(モバイル)サイト構築ではまる:文字化け
http://www.syrup-factory.com/b/archives/2006/02/post_1.php

・環境
さくらのレンタルサーバ
Apache 1.3.37
PHP 5.2.1 (自分でインストール)

たいていあっさりShift-JIS化終了。 が、どうもフォーム部分だけ文字化けが解消しない。PEARのHTML_QuickFormを使用しているのだが、textareaへ日本語を入力して確認画面を表示しようとすると文字化けする。

試行錯誤した結果、どうやら内部エンコーディング(mbstring.encoding)が EUC-JP としてきちんと解釈されていなかったのが原因だった。

もちろん phpinfo() で mbstring.internal_encoding の値は確認した。が、どうしてきちんと解釈されてなかったのか?それはよくよくphpinfo()を確認すると、Local Value 列の mbstring.internal_encoding は EUC-JP になっていたのだが、Master Value 列の mbstring.internal_encoding は no value であったからだ。これは、php.ini側で値を設定をするのではなく、.htaccess や、phpファイル内で ini_set したとき、この状況となる。

http://ml.php.gr.jp/pipermail/php-users/2006-September/030872.html
↑あたりの記事を見ると、どうやらモジュールの中には、Master Value しかみないものがあるようだ。QuickForm はこれに該当するのかしら? そこらへんの仕組みが私にはまだピンとこない・・。

このサイトがあるサーバでは、複数のサイトを突っ込み違う文字コードを使用していたので、PHPスクリプト側で mb_internal_encoding("EUC-JP"); としていたのですが、これが仇となったようだ。よって、スクリプト側でなく、php.iniで mbstring.internal_encoding = EUC-JP としてやることで問題解消。

私の場合はphp.iniにて以下のような設定をし、

mbstring.encoding_translation = On
mbstring.http_input = auto
mbstring.internal_encoding = EUC-JP
そして、携帯サイトのスクリプト冒頭にてこんな感じ
(必要最低限の設定しかしてません)。
mb_http_output("SJIS");
ob_start("mb_output_handler");

PHPスクリプトで各値をprintさせてみると以下。

[DEBUG]mb_internal_encoding = EUC-JP
[DEBUG]mb_http_input = ASCII (フォーム確認画面時はSJISになる)
[DEBUG]mb_http_output = SJIS

ちなみに、mbstring.http_inputもきちんと設定しないとダメだった。設定前のmb_http_inputは、たしか pass 。autoへ設定後は、通常ページではASCII、フォーム確認画面などの時はきちんとSJISになった。

AD:

今日のひと言

呑みいきたい!

磨者のはてなブックマーク はてなブックマーク

PHOTO COLLECTION

【WordPress】Ktai Entryをさくらで使う【メール投稿プラグイン】 : Go-PEARを使ったPEARのインストール : PEAR2.gif EmEditor で ダイレクトタグジャンプ : emeditor.gif WindowsXP へ XAMPP をインストール : xammp.jpg 携帯サイトで文字化け : 070707.gif 動的ページを静的URLで表示させる(PATH_INFO使用) : 400-300.gif PHP4でSmarty、tplファイルしか表示されないのは参照渡しが原因でした : php4%2Bsmarty.gif Dreamwerver で Smarty : Macromedia-Dreamweaver.gif MySQLの自動バックアップ phpMyBackupPro : logo.png さくらのレンタルサーバ へ PHP5.2.2 をインストールした : php.gif ダイナミックディスク⇔ベーシックディスクにはまる・・。 : 294574802_636f6f5e8c.jpg
RSS 2.0(XML)

Add to Google
My Yahoo!に追加
ADD TO Hatena::RSS
Subscribe with livedoor Reader

(→RSS/FEEDとは?

CLUB BASE st.215 最新NEWS