Smartyでマルチバイト文字を切り捨てる

もらった圧力鍋の使い方が最近分かったYu-ichiです:neko:

しばらくブログを書いていなかったので心配しているみなさん、
安心してください!生きてますよ!:kaoemojiA:

さて今回は、EC-CUBEなどで使われているSmartyに関するお話です。
色々なところでよく見かける長い文字を途中から省略して見せる方法
スタイルシートでも実現可能なのですが、Smartyを使っているサイトで簡単に行う方法をご紹介します。:wa-i:

{$変数名|truncate:文字数}


はい、これでどんな長い文字も「文字数」で指定した値で切り捨てられます。
簡単ですね!:kaomoji7:
でも、実際にやってみると何かがおかしい・・・。:kaomoji4:
そうです、実はこれ「文字数=バイト数」なのでマルチバイト文字には対応していないんです。
なので日本語で使うと中途半端なところでバッサリ切り捨てられてしまうため、文字化けが発生してしまいます。:naku:

そこで一番簡単で手っ取り早い解決方法をご紹介します。:kaomoji6:

{$変数名|mb_strimwidth:0:文字数}


PHP関数のmb_strimwidthをそのまま使います。:kaomoji2:
最初の「0」は開始位置、その後に表示する文字数を数値で指定します。
たったこれだけで簡単にマルチバイト対応できてしまいます。:kaoemoji1:
truncateをマルチバイトに対応させる方法も調べると出てきますが、
とりあえず今回はこれで事足りるのでひとまず解決です。:kaomoji8:

トラックバックURL