いやーいまどきEUCなんてというなかれ
結構現役で動いてるところまだあるんじゃないでしょうか。そして今どきSmartyなんていうなかれ、まだまだ動いてるでしょう。しらんけど。
結論
- smarty4でEUCを使いたいと、お急ぎの方はこれで
\Smarty::$_CHARSET = 'EUC-JP';
$smarty = new \Smarty();
$smarty->setEscapeHtml(true);
smarty3ではSMARTY_RESOURCE_CHAR_SETという定数があった
- ちなみにsmarty3では定数定義してあげればEUCで動きます
define('SMARTY_RESOURCE_CHAR_SET', 'EUC-JP');
smarty4ではこの定数なくなったので、どうしたらいいんだろうと途方に暮れる・・・
- ググってもあまりでません
- だいたいきょうびEUCて
- しょうがないのでコードを読んでみることに・・・
- このへんぽい
164 /**
165 * Flag denoting if Multibyte String functions are available
166 */
167 public static $_MBSTRING = SMARTY_MBSTRING;
168
169 /**
170 * The character set to adhere to (e.g. "UTF-8")
171 */
172 public static $_CHARSET = SMARTY_MBSTRING ? 'UTF-8' : 'ISO-8859-1';
public staticだから上書きできるな、グヘヘ
- と思っていたら、ドキュメントに書いてありました
- いつものドキュメントをちゃんと読みましょう的な
これで労することなくEUCを表示できるぜベイベーと思っていたら・・・
- 表示できひんやんけ!
- 真っ白・・・
- 10秒考えました、、、、この現象なんだっけ、、、、euc扱ってるとこれ発生するんですよね
- DBからとってきた値が表示されない、まっしろ
- そうだ!
htmlspecialcharsの文字コード指定だ
- これどこで設定しているかというとさっきの、$_CHARSETを引数にしているんですね
- ということはどっかで設定できるのかなとまたpublicメソッドを徘徊です・・・
- ありました、名前もズバリそのままsetEscapeHtml
- こいつにtrueを渡してあげることで、htmlspecialcharsの文字コード設定されて無事表示されます
smarty的にはUTF-8使えよと言ってる
- UTF-8前提でコードが変更されているので、致し方ないのではあるが
- escape設定をいれてあげないと動かないのはこれはわからないですよ・・・
- とにかく、動いてよかった