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によるチェックをかけた方が無難