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