Smartyの文字化け必須

最近、Smartyの導入の話があり初めて使用しているのですが、テンプレートに{$var}のように中カッコをつけて変換する方法です。これを使うとPHPなのにPerlでテンプレートを使った感じのページが作成できるので面白いです。

このタイトルでピンと来た方もいるかも知れませんが、テンプレートの中に「必須」と書き込んだときにエラーを発生してしまいます。これは文字コードがShift-JISの場合に 須 の字の2バイト目が } なので間違った解釈をされてしまうためです。それであれば最初からEUCで作るとか、変換するという手もありますが、クランアントがShift-JISで表示する仕様だったり、特殊文字を使用していてnkf等を利用すると文字欠けや化けを起こす場合はとても悩むと思います。

フロートタイプの掲示板や携帯電話向けコンテンツはこの部類になりますが、私が行った一番簡単な解決方法は必須という文字が必要な場合は変換必須にするだけ。

つまり、文字化けを起こすのはPHPではなくSmarty側なのでテンプレート側に必須を書かなければ良い。

index.tpl内に必須の文字があれば具体的にはこのようにする。

必須→{$hissu}

そしてindex.phpにはassainを追加する

$o_Smarty->(“hissu”,”必須”);

こんな感じです。