1. Home
  2. Archive
  3. smartyでマルチバイトに対応したtruncate修飾子

smartyでマルチバイトに対応したtruncate修飾子

smartyのtruncate修飾子は指定した文字数で文章を切って、切ったらその後に”・・・”など任意の文字を追加してくれる便利な修飾子です。

しかしそのtruncateもマルチバイトに対応していないようで、日本語に適用すると切ったところが微妙に文字化けしたりする場合があるんですよね。そういうわけでマルチバイト対応のtruncateを作ってみました。

function smarty_modifier_mb_truncate($string, $length = 80, $etc = '…')
{
  if ($length == 0)
    return '';
  if (mb_strlen($string,"UTF-8") > $length) {
    $string = mb_substr($string, 0, $length,"UTF-8");
    return $string.$etc;
  } else {
    return $string;
  }
}

下記ソースをmodifier.mb_truncate.phpと名前をつけて保存して、smartyのpluginsフォルダに置けばオッケーです。文字コードはUTF-8に指定しているので文字コードが異なる場合には変更が必要です。使い方は以下の通り。

[php]
$smarty->assign('text','広島カープにはぜひ頑張っていただきたいと思っている今日この頃です。');

[smarty]
{$text|mb_truncate:20}

[出力]
広島カープにはぜひ頑張っていただきたいと…

ちなみに単語の境界で切り取りを行うかどうかの、第3引数には対応していません。

トラックバックURL

http://webtech-walker.com/archive/2007/04/26154112.html/trackback

※トラックバックを受け付けてから表示するまでにしばらく時間がかかる場合があります。

コメント一覧

  1. いただきマンモス 2007年5月4日 08時07分

    いただきました。

    m( _ _ )m

  2. Baks 2007年12月19日 10時01分

    いただきます~~。ありがとうございます。
    ところで、使い方のところの
    > [smarty]
    > {$text|truncate:20}
    となってますが、
    {$text|mb_truncate:20}
    じゃないと動かなかったんですが・・・

  3. hoka(管理人) 2007年12月19日 11時07分

    Baksさん

    コメントありがとうございます。

    >{$text|mb_truncate:20}
    >じゃないと動かなかったんですが・・・

    すいません!思いっきり間違えてました。修正しておきました。ご指摘ありがとうございました。

コメントフォーム

※HTMLタグは使用できません。