2008年1月9日水曜日

 

【PHP】携帯サイトからデータベースにアクセスする【文字コード】

PHP+MySQLでサイトを構築。
一般用の公開ページとユーザ用の編集ページがある仕組み。

普通にUTF-8でDBを構築。携帯用のサイトも作れって事で、Shift-JISが標準な携帯サイトUTF-8でしかテンプレートを作れないSmartyで四苦八苦。
Smartyを使ってUTF-8で作成し、表示直前にShift-JISにエンコードという方法で解決。(参照: Smartyはじめました!2007年12月28日エントリ)

携帯からも編集させろと完成間際に言われ、Shift-JISからUTF-8に変換してからSQLクエリを発効すればいいかと思ったらauだけ文字化け

調べると、携帯用のDBはShift-JISが無難らしいがPC兼用だしUTF-8でほとんど出来てるので変更は不可。
auはフォームを送るとき、action属性に必ず「x-up-destcharset=17」(例:index.php?x-up-destcharset=17&page=1)というのがつくとか、サーバで勝手にエンコードするので初期設定を変える必要が有るとか。
解決策が見つからず、内部エンコードとか怪しいところを調べたが不明。

auのフォーム値は強制Shift-JISとあったが、何故かPOSTの値がASCIIコードで送られている。 文字化けだと思ってた文字列がURLエンコード値だったのでPOST値をurldecode()関数でデコードするとShift-JISで文字化け解消
さらにUTF-8に変換してDBに渡す事でおそらく解決。

昔、携帯専用サイトを作ったときの文字化けは以下のコードで解決した。


$interenc = mb_internal_encoding();
$inputenc = mb_convert_variables($interenc, "ASCII,UTF-8,SJIS-win", $str);

ラベル: , ,


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google