■ 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のタグも無効化されるので書く位置には注意。
この環境を構築するのは初めてだったが、予想よりかはあっさりと動き開発を始めた・・・のだが、なんか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 [技術・作業]Tweet
関連記事:
■備忘:mb_send_mailで添付ファイル付きメールを配信したらoutlookだけ添付ファイルがNull埋めになった件
■Bitcoin取引所「Mt.Gox」がハックされて20GB分の顧客情報などが流出
■JPEG画像のEXIFヘッダにマルウェアを隠して実行させる新しい手口が登場
■PHP 5.5.0 for Windows登場 - 最大152%高速化
■恐らくは他に役に立たないであろう備忘。Linux上のPHPからwinexeを起動して他のWin機のコマンドを実行したい場合。
■備忘:PHPからActive Directoryのアカウント情報をいじる場合のあれこれ
■Windows版ZendServerのhttpd.confを編集しても設定が反映されない場合
■PHP53においてtimezoneをAsia/Tokyo設定した場合話。
■Facebookが公開したPHP仮想マシン「HipHop VM」とは
■PHP開発チームが「PHP 5.3.7」の重大なバグを報告、「5.3.8を待つように」
■Bitcoin取引所「Mt.Gox」がハックされて20GB分の顧客情報などが流出
■JPEG画像のEXIFヘッダにマルウェアを隠して実行させる新しい手口が登場
■PHP 5.5.0 for Windows登場 - 最大152%高速化
■恐らくは他に役に立たないであろう備忘。Linux上のPHPからwinexeを起動して他のWin機のコマンドを実行したい場合。
■備忘:PHPからActive Directoryのアカウント情報をいじる場合のあれこれ
■Windows版ZendServerのhttpd.confを編集しても設定が反映されない場合
■PHP53においてtimezoneをAsia/Tokyo設定した場合話。
■Facebookが公開したPHP仮想マシン「HipHop VM」とは
■PHP開発チームが「PHP 5.3.7」の重大なバグを報告、「5.3.8を待つように」