CakePHP

携帯端末向け出力文字コードの変換

CakePHP

今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になって仕様変更したのだと解釈しておりますが、ちゃんとコード解析したわけではないので断言はできません。これで合っているのでしょうかね?
とりあえず、これで進めて行きたいと思います。

スポンサーリンク
記事を書いた人

システムえんじにゃー🐈
趣味はエレキギター、自転車など。作曲したい。
World of Warshipsやってます。
記事に関する質問はお気軽にどうぞ。

surface0 (さーふぇす)をフォローする

コメント

  1. 何気なく書いた記事だったのですが、みなさんのお役に立てて光栄です。
    今のところまだ1.2の公式マニュアルは不十分なところが多いですし、参考書もわずかですからこういった情報をかき集めていくしかないですね。

  2. 有益な情報ありがとうございます。

    「CakePHPガイドブック」の14章「携帯電話向けシステムの作成」のサンプルをバージョン1.2で動かす方法を探していました。

  3. わたしも同じ問題に悩まされていました。
    助かりました。

    たぶん仕様変更したのでしょうね。・

タイトルとURLをコピーしました