cakePHPで携帯用にする方法はいくつかあるようですが、私の場合。
・内部はUTF-8、出力はSHIFT-JIS,入力をUTF-8に変換
app/app_controller.php
if($this->RequestHandler->isMobile()){
mb_language('ja');
mb_internal_encoding('UTF-8');
mb_http_output('SJIS');
ob_start("mb_output_handler");
mb_convert_variables("UTF-8", "SJIS", $this->params['url']);
mb_convert_variables("UTF-8", "SJIS", $this->params['form']);
mb_convert_variables("UTF-8", "SJIS", $this->data);
}
・RequestHandler(拡張子)で「.mobile」を使用する。
app/config/routes.phpに追加
Router::parseExtensions('mobile');
app/app_controller.php
$this->RequestHandler->setContent("mobile",'text/html');
app/viewsの各コントローラーおよびlayoutsのフォルダに「mobile」フォルダを作成してビューを配置するのですが、なぜかドコモHPから入手できるiモードHTMLシミュレータでエラーになりました。layout用ビューを秀丸で一度文字コードをSFIFT-JISで保存してからUTF-8で保存しなおすと直りました。
・リダイレクトをオーバーライド,セッションID付加
app/app_controller.php
//redirect メソッド書き換え
function redirect($url,$status = null) {
if($this->RequestHandler->isMobile()){
if(strpos($url, '.mobile') === false) {
$url = $url.".mobile?".Configure::read('Session.cookie')."=".session_id();
} else {
$url = $url."?".Configure::read('Session.cookie')."=".session_id();
}
parent::redirect($url,$status);
} else {
parent::redirect($url,$status);
}
}
他にも各リンクでセッションID引き渡しをします。
core.phpの
Security.levelがhighの場合、Session.phpでsession_regenerate_id()(セッションID振り直し)してくれます。
各リンクでセッションID引き渡しがめんどうなら、リーサルウェポンsession.use_trans_sidを使う手も。
core.phpの
Configure::write('Session.save', 'mobilesession');
とかカスタム宣言して、同フォルダにmobilesession.phpファイルを作成。session.phpの457行目以下を参考にしてカスタマイズします。
注意!session.use_trans_sidはPHP5以上でないとini_setできません。