Drupalを携帯で見たとき、無理矢理SJISにするハック
某ビジネスサークルのアレやが、なんとかして携帯でユーザ登録くらいはできんと話にならんので、なんとか携帯に対してエンコーディングをSJISに変換してデータを送信したい。もしかしたら出力をフックするような機能があるのかもしらんが、ざっと見た限り無さそうやったんで無理矢理対応させる。もっとうまい方法は無いのか…。
超適当に作った以下のような関数を、include/common.incに追加する*1。
function is_mobile(){ if( preg_match( "/DoCoMo/",$_SERVER['HTTP_USER_AGENT'] )|| preg_match( "/J-PHONE/",$_SERVER['HTTP_USER_AGENT'] )|| preg_match( "/Vodafone/",$_SERVER['HTTP_USER_AGENT'] )|| preg_match( "/SoftBank/",$_SERVER['HTTP_USER_AGENT'] )|| preg_match( "/J-EMULATOR/",$_SERVER['HTTP_USER_AGENT'] )|| preg_match( "/UP\.Browser/",$_SERVER['HTTP_USER_AGENT'] ) ){ return TRUE; } return FALSE; }
んで、index.phpとcommon.incで
print theme('page', $return);
となってるところを
if(is_mobile()) print mb_convert_encoding(theme('page', $return), 'SJIS', 'UTF-8'); else print theme('page', $return);
にする。あとcommon.incをContent-typeで検索して、同様にutf-8とshift-jisを選択するようにすれば多分完了。
文字化けはこれでええけど、テーマを強制選択するにはどうすればええんやろうか…。
あれ、そういえばPOSTできない携帯の機種があったような…。そんなのは知らんということにしようか。どうしよう…。
真面目にやるなら、このへんを参考にすれば警告くらいはできそう。perlスクリプトやけど、postできるかどうかの判別までできるっぽい。
*1:あとでこの関数を随所に使い回すので、本当はstatic変数使って効率を上げて、更にIPによるチェックをかけた方が無難