mb_wordwrap

Webサイトを開発していると、トップページなどに

「サムネイル画像+コメント数行を4つ並べる」

のような仕様を良く見かけます。

このとき、コメントが「スペースなしのアルファベット」だったりするとテーブルデザインが崩れ何らかの対応が必要になったりします。

僕の開発プラットホームは、php+Smartyライブラリで構成されていますが、こんなとき以下のような関数を使っています。(Smarty pluginモジュールです)

<pre>
<?php

/*
 * Smarty plugin
 * ————————————————————-
 * Type:     modifier
 * Name:     mb_wordwrap
 * Purpose:  wrap a string of text at a given length
 * ————————————————————-
 */
function smarty_modifier_mb_wordwrap($string,$length=80,$break=”n”,$cut=false)
{
        return mb_wordwrap($string,$length,$break,$cut);
}

function mb_wordwrap($str, $width = 80, $break = “n”) {
        $buf = “”;
        $k = 0;
        $n = 0;
        $iskanji = 0;
        for($i=0; $i<=strlen($str); $i++){
                if ($k && $k >= $width){
                        $buf .= substr($str, $n, $k).$break;
                        $n += $k;
                        $k = 0;
                }
                if ($str[$i] <= ‘~’){
                        $iskanji = 0;
                        $k += 1;
                }
                else{
                        $iskanji++;
                        if ($iskanji == 2){
                                $iskanji = 0;
                                $k += 2;
                        }
                }
        }
        $buf .= substr($str, $n, $width);
        return $buf;
}

?>
</pre>

Smartyテンプレートファイルでは、
<pre>{$list.title|mb_wordwrap:18:”<br>”|strimwidth:”60″:”…”}</pre>
のように指定します。
上記例の場合、半角18文字で改行され、60バイト以上は”…”みたいに表示されます。

ガイドミーでは、そんな細かいこと気にしてませんよ~