表示で長い文字列を丸める! 
2008/11/28 金曜日 14:45:33
本日投稿2個目、チョコボールです。
DBから引っ張ってきた文字列をセレクトボックスで表示させる箇所で、
長ったらしい文字列があるせいでデザインが崩れてしまっている!という指摘を受けました。
指定した幅以上は「…」で表示するという、よくある表示方法で対処しようと思い、
substr関数等であれこれ試していましたが、mb_strimwidthという関数を使うといい感じでした。
mb_strimwidth(【文字列】,【開始位置のオフセット(最初の文字は0)】,【幅】,
【丸めた後にその文字列の最後に追加される文字列】,【文字エンコーディング】)
表示部分で『この横幅以下に抑えたい』という時に使えます。
文字コードに依存せず、第3引数の数値は半角を幅1、全角を幅2とします。
文字数ではありません。
また、第4引数も含めた数値になります。
$str = "あいうえおかきくけこ"; $str2 = "This is a pen."; echo mb_strimwidth($str, 0, 10, '…', 'UTF-8'); echo '<br />'; echo mb_strimwidth($str2, 0, 10, '…', 'UTF-8');
上記の結果は下記のようになります。
あいうえ…
This is a…
全角の文字の場合でも半角の文字の場合でもだいたい横幅が揃うはずです。
smarty側で書く場合はこんな感じです。
{$str|mb_strimwidth:0:10:'…':'UTF-8'|escape}