いつものごとく、サイトを作るときはZend Framework+Smartyで作ってます。
今回携帯サイトを作ることになったのですが
けっこう難しかったのでメモ。
最初の構想はshift-jisでphpもテンプレートもmySQLはset namesでやっちゃえば
それだけで充分いけるだろうって考えていたのに甘かった。。
最初につまづいたのがshift-jisで書かれたテンプレート。
Smartyはshift-jisが未対応のようで、構文エラーを起こします。
なので全てをutf-8で作って最後にshift-jisで出力する作戦に変更。
プラグインフィルターを使って出力直前にエンコード変換させるので
display直前で
$this->register_outputfilter( array($this,”utf_to_shift_filter”) );
を入れました。
クラス内で関数名指定をするときはこんな書き方です。
utf_to_shift_filterは単純で単にエンコード変換して返すだけです。
/** * エンコード変換 */ function utf_to_shift_filter($buff, &$smarty){ $buff = mb_convert_encoding($buff, 'Shift-jis', 'UTF-8'); return $buff; }
プラグインフィルターを最初に設定しちゃうとfetchでテンプレートを取得するときに変換され、displayで2度変換されちゃいます。
やって欲しいのは最後の1回でいいのでdisplay直前に。
.htaccessファイルに
AddDefaultCharset UTF-8
を入れてあるとheaderに勝手に
Content-Type text/html; charset=UTF-8
が勝手に入ってしまうので抜きました。
クッキーが使えない想定でパラメーターでセッションを管理します。
ini_set('session.use_trans_sid', 1);
を追加。
サイト内パスが絶対になっているとセッションIDが自動で付きません。
(判明するまで苦労した;)