cake2.0系で携帯サイト対応する方法(文字化け対応)
携帯サイトを作成するとき、エンコードをSJISにする必要があるが、cakeのデフォルトエンコードはUTF-8なので、いくつか対応してあげないと文字化けする。
cake1.x系だと、下記の方法でいけそう。
[CakePHP] 携帯サイトの作り方まとめ by Sometime PHP様
でもcake2.0になると、afterFilter() の中で、下記のように記述するという方法がそもそも使えない。
$this->output = mb_convert_kana($this->output, ‘rak’);
$this->output = mb_convert_encoding($this->output, ‘SJIS-win’, ‘UTF-8’);
…..
→$this->outputが使われなくなってしまっているため。
ちょっとソースをみてみたら、下記の方法でできそう。
$this->response->body(mb_convert_encoding($this->response->body(), ‘SJIS-win’, ‘UTF-8’));
$this->response (CakeResponseクラス)のbody関数は、引数が設定されていた場合は引数の値をbodyにセットし、引数が無い場合は今もっているbodyを返す。
と、これでテストしてみたらどうもまだ文字化けする。HTMLはSJISで渡っているものの、ブラウザがUTF8として処理をしてしまっている。
もちろん、HTML内でcharsetの設定はしている。
HTTP-HEADERをみてみると、ヘッダーでcharsetをUTF-8として送信しているよう。
今度はCakeResponse.phpをみてみたら、CakeResponseに対してcharsetの指定をしてあげないといけないらしい。
これをしないと、core.phpで指定した下記の値が引き継がれる。
Configure::write(‘App.encoding’, ‘UTF-8’);
ということで、下記にて一件落着。
function afterFilter() {
parent::afterFilter();
if($this->request->params[“prefix”]==”m”){
$this->response->body(mb_convert_encoding($this->response->body(), ‘SJIS-win’, ‘UTF-8’));
$this->response->charset(‘SHIFT-JIS’);
}
}
携帯サイト対応っていろいろ面倒ですね。
コメントはまだありません。