Smartyのtruncate修飾子が効かない場合の回避法

マルチバイトでうまく動かないtruncate修飾子

あちこちで書かれていますが、文字列のカウントにstrlenを使ったりしているので、日本語文字列でうまく動いてくれません。

で、よく書かれている対処法がmb_truncateという修飾子を作っちゃえ!ということですが、「ファイル増やしたくないし、Smartyライブラリをいじるのは禁止されてるし…」という方には!

そのままテンプレート上でmb_substrを使っちゃう

あまりエレガントではないですけど、以下の方法でもできます。

以下の例は、utf-8の文字コードの文字列を80文字で切り捨てて「・・・」を付加する方法です。

{$myStr|mb_substr:0:80:"utf-8"}{if mb_strlen($myStr, "utf-8") > 80}・・・{/if}

このように、修飾子にそのままPHP関数を使うことができます。 パイプライン「|」の左側に、使いたい関数の第一引数を書いて、それ以降の第2引数以降はコロン「:」で区切って指定します。 変数のアサイン(assign)などでも利用できるので、使ってみてくださいね。

{assign var=shortStr value=$myStr|mb_substr:0:80:"utf-8"}

このページをシェアする

2009-02-20