Smartyの文字化け対策(2)

ついさっきだけど久々Smartyの文字化けについてググったらナイスなサイトがヒットしました。
今までは必須の須が化けるなら、変数化してPHPから変換をかけていましたが、literalタグを使えばその中身は変換対象から無視してくれるみたい。つかこの方法もっと早く知りたかった。 orz…

参考
http://www3.atwiki.jp/tmogmni/pages/3.html#id_8dca57f0

Monacoinを投げる
モナゲ(tipmona)ってなに?
そもそもMonacoinってなに?

Smartyの文字化け必須

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

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

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

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

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

必須→{$hissu}

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

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

こんな感じです。

Monacoinを投げる
モナゲ(tipmona)ってなに?
そもそもMonacoinってなに?