[0] Windows環境(つかShift-JIS環境)におけるSmartyの問題-[Id of Radiance ver.5]





■ Windows環境(つかShift-JIS環境)におけるSmartyの問題

 あんまりやりたくなかったのだが、Windows2003Server上のIIS+PHP5+Smarty環境で開発を行う必要に迫られた。
 この環境を構築するのは初めてだったが、予想よりかはあっさりと動き開発を始めた・・・のだが、なんかSmartyテンプレートのヘンなトコロで以下のよーなエラーが発生。

Fatal error: Smarty error: [in index_01.tpl line 2]: syntax error: unrecognized tag: 〜

 認識されないタグ?でも指定された行は単なるテキストで、Smarty関連のタグは入ってない。こーゆー時ってヘンなトコロにヘンな文字コードが入って誤認識を起こしてる事が多いよなーとか思い、入力されてる文字列を1つ1つ確認していったところ、「ボ」でエラーを起こしてることを突き止めた。でも今までSmarty使ってても「ボ」ってフツーに使ってたよなー。

 結局のところコレはShift-JISにおける「ボ」の文字コードが「837B」であり、 Smartyのタグ記述用デリミタ「{」の文字コード「7B」とカブってる事が原因らしい。そっかー、今までSmartyってEUC-JPかUTF-8でしか書いたことなかったからなー。Smartyってマルチバイト環境の事あんま考えて無さそうだし、やっぱ慣れない事はするべきじゃないってことですかねえ。

 で、上記の対抗策として、デリミタを無効化・画面表示する{literal}で該当文字列を括るとか、EUC-JP等で記述して mb_convert_encodingで変換する手とかがあるようだが、文字列をPHP側で変数に入れてソレを表示する分には問題ないっぽい。状況にもよるだろうけど文字列は全て変数に叩き込むのも1つの手かも知れない。

追記:「本」もダメだった。他にもいくらでもありそう。さすがに文字コード全部見る気はしない。文字列全て{literal}で括るのが基本になるでしょか。
 当然だけど括った中はSmartyのタグも無効化されるので書く位置には注意。

2006-05-31 [技術・作業]

関連記事: