Smartyで文字コードを変換するには?

【この記事の所要時間 : 約 3 分

PHP+Smartyで作っているPCサイトの携帯サイトを作る必要があった。PCサイトは文字コードがEUCであるが、携帯サイトはShift-JISにする必要があり、SmartyのテンプレートをShift-JISにしてやってみたが、テンプレートにハードコーディングしている文字は大丈夫だが、phpからテンプレートへ渡している文字が文字化けしてうまくいかない。結論として、テンプレートはEUCでいいが、$smarty->display の前までにphp内の文字列の文字コードをShift-JISにしてやる必要があることがわかった。
Smartyの関数とかでできないかと調べてみるが、そういう機能はないらしい。さてさてどうしたものかと悩んでいたら、以下のサイトを発見した。
php+smartyで手抜きケータイサイトをつくる。

php+smartyで動いているPC用のサイトを携帯サイトに変換してしまう方法をご紹介。
やり方は簡単。
1.ユーザーエージェントやIPなどで携帯からのアクセスか、パソコンからのアクセスかを判別する。
2.携帯からのアクセスだった場合はsmartyのテンプレート関連ディレクトリを携帯用のテンプレートを入れたディレクトリに切り替え。
※携帯用のテンプレートはPC版と同じ文字コードにしておいてください。
3.$smarty->displayしてるとこでPCからのアクセスだった場合はそのままdisplayで表示させる。
携帯からのアクセスだった場合は$smarty->fetchで表示結果を変数に取得し、
mb_convert_encodingを使って文字コードをSJISに変換して変数の内容をechoで書き出し。
以上。
PC版のプログラムをほとんどいじることなく携帯サイトをこれでつくりあげました。

なるほど!!!!!!

$smarty->fetchで表示結果を変数に取得し、mb_convert_encodingを使って文字コードをSJISに変換して変数の内容をechoで書き出し。

これが思いつかなかった。
ということで携帯からサイトにきた場合は、以下のようにして処理することで解決。

// smartyのテンプレートを指定
$loadtpl = “hogehoge.tpl”;
// 携帯なので結果をいったん変数に入れる
$output=$smarty->fetch($loadtpl);
// SJISに変換する
$output=mb_convert_encoding($output,”SJIS”,”EUC-JP”);
// 変数の内容をechoで書き出し
echo $output;

Smarty入門‾PHP+テンプレート・エンジンでつくるMVCアプリケーション‾
山田 祥寛
翔泳社
売り上げランキング: 103,373
スポンサーリンク
レクタングル(大)広告
  • このエントリーをはてなブックマークに追加
スポンサーリンク
レクタングル(大)広告

コメント

  1. 通りすがり より:

    大変参考になりました。ありがとうございます。。
    ですが、これ、フォームなどで値を渡した時には変換されずに文字化けが起きませんか??

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です