インストールメモ » CakePHP » cakePHPでPCと携帯で出力文字コードを変更する方法

cakePHPでPCと携帯で出力文字コードを変更する方法

携帯用のサイト用のビューをShin x blogさんのサイトを参考にして、設定しPC用と携帯用のサイトをビューだけを切り替える方法で運用しています。
そこで問題になるのが文字コードです。
私の場合、PC用のサイトはスクリプトの文字コードも出力文字コードもUTF-8で統一させる場合が多いのですが、携帯用のサイトの場合に出力文字コードをUTF-8にしてしまっては、最近の機種でしか見る事が出来ません。
そこでPC用と携帯用で文字コードを切り替えて利用しています。
PC用の場合には、上の通りUTF-8で統一して、携帯用の場合には、スクリプトの文字コードは全てUTF-8にして、出力時にShift_JISに変換しています。

詳しくは、/app/app_controller.phpのafterFilterで、文字コードをUTF-8からShift_JISに変換して出力して、beforeFilterで、入力文字の文字コードをShift_JISからUTF-8に変換しています。

class AppController extends Controller {

function beforeFilter() {
// 入力データの文字コード変換
if ((isset($this->params["webservices"])
&& $this->params["webservices"] == "Mobile") {
mb_convert_variables("UTF-8", "SJIS-win", $this->data);
}

// 出力データの文字コード変換
// afterFilter で文字コード変換するためにob_startで
// 出力のバッファを行なう
ob_start();

parent::beforeFilter();
}

function afterFilter() {
parent::afterFilter();

// バッファを取得して、出力バッファをクリア
$out = ob_get_clean();

if ((isset($this->params["webservices"])
&& $this->params["webservices"] == "Mobile") {
// 出力文字コードの変換
$out = mb_convert_encoding($out, "SJIS-win", "UTF-8");
}

echo $out;
}
}

これで、携帯用のビューの場合には、出力時にShift_JISに変換して出力し、入力文字はUTF-8に変換されます。
また/app/views/pages以下のページも同様に変換したい場合には、以下の様にする事で変換する事が出来ます。

class AppController extends Controller {

function afterFilter() {
parent::afterFilter();

// バッファを取得して、出力バッファをクリア
$out = ob_get_clean();

if ((isset($this->params["webservices"])
&& $this->params["webservices"] == "Mobile")
|| ($this->params["controller"] == "pages"
&& $this->params["action"] == "display"
&& isset($this->params["url"]["url"])
&& substr($this->params["url"]["url"], 0, 8 ) == "pages/m/")) {
// 出力文字コードの変換
$out = mb_convert_encoding($out, "SJIS-win", "UTF-8");
}

echo $out;
}
}
Filed under: CakePHP — jun 1:31:31