今PCと携帯向けの両方を含むサイト作ってます。CakePHP導入してます。PC用はUTF-8で出力して携帯向けにはSJISで出したい。やっぱりソースはUTF-8じゃないと都合が悪い!って思って調べてみましたんでメモ。
http://www.easy-in.net/archives/8/
CakePHP 携帯専用サイトを作成する | Sun Limited Mt.
CakePHP で携帯用のページを作成する際に CakePHP 携帯用ビューを表示する | Shin x blog
でも、なんかうまくいかない・・・ぞ?
CakePHP 1.2.0.7296 RC2において。
どちらのリンク先もbeforeFilter()
で出力バッファリングを仕掛けて、afterFilter()
で回収した後にmb_convert_encoding()
で変換としていますが、ob_get_clean()
で何も入ってきません。。。
試しにob_start()
の直後にecho
してみるとその内容はちゃんと回収できます。
つまり、その間なにも出力されてないわけですね。
そこでソースコードをさらっと読んでみたんですが、Controller
クラスではなにやら$this->output
に出力内容を押し込んでいるのが見受けられました。またView
クラスでも同様のことをやっていました。
どうも出力する内容は全部$this->output
に収められるようです。
試しにこんな感じにしてみました。
function beforeFilter() {
parent::beforeFilter();
}
function afterFilter() {
parent::afterFilter();
$this->output = mb_convert_encoding($this->output, 'SJIS-win', 'UTF-8');
}
beforeFilter()
ではなにもしてません。
いざ動かしてみると、あっさりうまくいきました。ちゃんと出力がSJISになっています。
1.2になって仕様変更したのだと解釈しておりますが、ちゃんとコード解析したわけではないので断言はできません。これで合っているのでしょうかね?
とりあえず、これで進めて行きたいと思います。
コメント
何気なく書いた記事だったのですが、みなさんのお役に立てて光栄です。
今のところまだ1.2の公式マニュアルは不十分なところが多いですし、参考書もわずかですからこういった情報をかき集めていくしかないですね。
有益な情報ありがとうございます。
「CakePHPガイドブック」の14章「携帯電話向けシステムの作成」のサンプルをバージョン1.2で動かす方法を探していました。
わたしも同じ問題に悩まされていました。
助かりました。
たぶん仕様変更したのでしょうね。・