PHP の mb_strimwidth 関数で表示する文字列の長さを調節する

2007年 10月 21日 12:45

webページ上で文字列を特定の長さで揃えて表示したいっていう要望は結構あると思います。
特に、何かのリストを一覧表示するような場合、ある程度長さが揃っているときれいに見えます。

例えば、次のような一覧があったとします。

abcdefghijklmnopqrstu
あいうえおかきくけこさしすせそ
あいうabcえおかdefきくけghi

これをmb_substrを使って整えてみます。

$len = 10;
print(mb_substr("abcdefghijklmnopqrstu", 0, $len) . "<br />");
print(mb_substr("あいうえおかきくけこさしすせそ", 0, $len) . "<br />");
print(mb_substr("あいうabcえおかdefきくけghi", 0, $len) . "<br />");

実行した結果は次の通りです。

abcdefghij
あいうえおかきくけこ
あいうabcえおかd

mb_substrの場合、半角英数も全角文字も1文字として扱われてしまうため、単純に文字列を切り取ってしまうと、長さがきれいに揃いません。

こういう場合には、mb_strimwidth関数を使うと、それなりにきれいになります。

$len = 10;
print(mb_strimwidth("abcdefghijklmnopqrstu", 0, $len, "", "UTF-8") . "<br />");
print(mb_strimwidth("あいうえおかきくけこさしすせそ", 0, $len, "", "UTF-8") . "<br />");
print(mb_strimwidth("あいうabcえおかdefきくけghi", 0, $len, "", "UTF-8") . "<br />");

実行した結果は次の通りです。

abcdefghij
あいうえお
あいうabc

mb_strimwidth関数では、半角を1文字全角を2文字として計算されるため、それなりにはきれいに揃います。ただ、これはあくまで「それなりに」きれいになるだけで、完全に桁を揃えることは出来ません。なぜなら、表示時の文字の幅はフォントに依存してしまうため、単純に半角1文字、全角2文字で計算しても、きちんと揃わない場合があるからです。

ただ、単純に mb_substr関数を使うよりは、mb_strimwidth関数を使った方が、きれいに見えるでしょう。

また、mb_strimwidthの4番目の引数に文字列を記述すると、切り取られた文字列の末尾に含まれて出力されます。

例えば、次のような感じです。

$len = 13;
print(mb_strimwidth("abcdefghijklmnopqrstu", 0, $len, "...", "UTF-8") . "<br />");
print(mb_strimwidth("あいうえおかきくけこさしすせそ", 0, $len, "...", "UTF-8") . "<br />");
print(mb_strimwidth("あいうabcえおかdefきくけghi", 0, $len, "...", "UTF-8") . "<br />");

実行した結果は次の通りです。

abcdefghij…
あいうえお…
あいうabc…

ここで、注意したいのは、追加した文字列(この場合”…”)の文字数も切り取り時の文字数に含まれる点です。なので、この例の場合では、ドット3文字分を追加して $len = 13 としています。


トラックバック URL


※言及リンクのないトラックバックは削除されます。
※書き込まれてから公開されるまで時間がかかる場合があります。

コメント / トラックバック 1 件

  1. PHP:UTF-8全角の文字数を2文字でカウント | 5×2.info より:

    [...] 以下のページがとても参考になりました。 PHP の mb_strimwidth 関数で表示する文字列の長さを調節する - hoge256ブログ [...]

コメントをどうぞ

Spam protection by WP Captcha-Free

※書き込まれてから公開されるまで時間がかかる場合があります。