Smartyのtruncate効果(マルチバイト対応)を既存の文法で行う
Smartyで独自のtruncate修飾子を作るのがめんどくさい!っていう人もいるようなので、Smarty2でも3でも使えるPHPマルチバイト関数を利用した方法をお教えします。
mb_substr()関数とmb_strlen()関数の併用
例えば文字コードがUTF-8で、日本語文字列を含むテキストを80文字で省略して、続きに「…(三点リーダー)」を付加するには以下のようにします。
$str = 'あいうえお...(以下延々とマルチバイト文字)'
{$str|mb_substr:0:80:'utf-8'|escape}{if mb_strlen($str, 'utf-8') > 80} ...{/if}
標準のPHP関数はパイプを使うことで利用できますから、何か事情があってテンプレートしかいじれない人にはこの方法がいいでしょう。
2013-03-08