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バイト以上は”…”みたいに表示されます。
ガイドミーでは、そんな細かいこと気にしてませんよ~