カテゴリー

smarty modifierのtruncateを日本語対応させる

Smartyのmodifierで指定文字数で文字列を切るというtruncateというのがあります。(Smartyを使ったことある人には当たり前すぎることなんですが)日本語などのマルチバイト文字では文字化けが起こってしまいます。まあ、誰か対応してるだろうと思ってググってみたら、いしなお!というブログにて見つけたのでメモ。

function smarty_modifier_mbtruncate(
    $string,
    $length = 80,
    $etc = '...') {
    if ($length == 0) {return '';}
    if (strlen($string) > $length) {
        $length -= strlen($etc);
        return mb_strcut(
            $string,
            0,
            $length).$etc;
    } else {
        return $string;
    }
}

というコードをSmartyのプラグインディレクトリに置くだけで・・・・おおお。できた。
即採用。
デフォルトのtruncateをいじれば何とかなると思ったけど、助かりました。

なお、いしなお!さんでも

ああ、日本語ではbreakwordなんか考えたらおかしくなるな。削っておこう。

と触れているように、単語区切りは使えなくなります。
この部分は、日本語の単語の区切りは分かりにくいという特性上あきらめなきゃいけないらしい。(これで英単語も問答無用で途中で切れちゃうわけですが。)

なるほどね。プラグインの作り方もわかったし。感謝です。
ちょっと必要なものをいくつか作ろう。作ったら。暇なとき公開します。

Comments are closed.