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

  • このエントリーをはてなブックマークに追加

今PCと携帯向けの両方を含むサイト作ってます。CakePHP導入してます。PC用はUTF-8で出力して携帯向けにはSJISで出したい。やっぱりソースはUTF-8じゃないと都合が悪い!って思って調べてみましたんでメモ。

cakePHPでPCと携帯で出力文字コードを変更する方法 – インストールメモ
CakePHP 携帯専用サイトを作成する | Sun Limited Mt.

でも、なんかうまくいかない・・・ぞ?

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

  • このエントリーをはてなブックマークに追加

SNSでもご購読できます。




コメント

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

  2. 通りすがり より:

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

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

  3. ぽにょ より:

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

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

コメントを残す