Smartyのフィルタ
携帯サイト等シフトJISでサイトを構築する場合、Smartyを使うことにしている。PHP自体はシフトJISでの記述はNGなのでUTF-8で記述し、テンプレートHTMLをシフトJISで記述して使用している。素でそのまま使ってしまうと文字化けしてしまうので、テンプレートを読み込む際にいったん文字コードをUTF-8に変換し、出力するときに再度シフトJISに変換するような処理をしている。
そのときに便利な機能がSmartyのフィルタだ。フィルタにはプレフィルタ、ポストフィルタ、アウトプットフィルタの3種類があり、用途は以下のとおり。
- プレフィルタ(prefilter)
テンプレートをコンパイルする際(コンパイル前)にテンプレートファイルに対して処理が施される。 - ポストフィルタ(postfilter)
テンプレートをコンパイルする際(コンパイル後)にテンプレートファイルに対して処理が施される。 - アウトプットフィルタ(outputfilter)
コンパイルされたテンプレートに対して出力用の変数がアサイン等され、実際に出力する際に処理が施される。
実は最初勘違いしていた。プレフィルタとポストフィルタだけだと思っていた。テンプレート読み込み時にプレフィルタにかけられ、HTML出力時にポストフィルタにかけられると思っていた。Smartyを使った処理を記述する際に、希望通りの動作をしてくれないのでマニュアルを読み直してみて初めて知った。ちょっと恥ずかしい。