[Smarty] 日本語の文字数をカウントする

会員サイトでログイン中のユーザの日本語姓名を表示する際に、もし姓名の文字数が極端に長いユーザであってもレイアウトの崩れを起こさないように、姓名が8文字を超える場合には姓だけを表示するようにしたい、といった要望あり。

ASCII文字数なら count_characters 修飾子で得られるけど、日本語文字数はどうやってカウントできるんだろ?と調べてみたら以下の記事がヒット。

【Smarty】文字数カウント | enjoyブログ♪
http://enjoy-pcworks.com/infotech/php/286

文字数が10文字以上だったらclassを付ける例:
{if $str|mb_strlen:’UTF-8′ >=10} class=”hoo”{/if}

この例ではSmartyの修飾子にmb_strlen関数を使っている。念のためSmartyのマニュアルを読み直してみたら、「すべての PHP 関数は、暗黙的に修飾子として使用できる」と明示されていた。

Chapter 5. 変数の修飾子 | Smarty
https://www.smarty.net/docs/ja/language.modifiers.tpl

以上を参考に以下コーディング。