LoginSignup
9
0

More than 1 year has passed since last update.

Smary4でEUCを使う方法

Posted at

いやーいまどき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設定をいれてあげないと動かないのはこれはわからないですよ・・・
  • とにかく、動いてよかった
9
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
0