[PHP] 指定の幅で文字列をまるめる関数 mb_strimwidth

投稿日:2014年7月4日

「30文字以上の場合は、30文字にして最後に”…”をつける」
という風にしたい場合はけっこうあります。
本文を抜粋表示したい時などです。

しかし、『30文字以上はまるめる』という時に、本当にやりたいこととしては、
『指定の枠に収まらない文字をカットする』
ということです!

『指定の枠に収まらない文字をカットする』がやりたい時に、
「30文字でまるめる」という風に文字数で処理するのは問題があります。
半角英数字と全角文字の表示サイズが違うので、
全角文字30文字と半角文字30文字ではかなり長さが変わってきます。
結果、予期せぬ表示くずれが発生したり、逆にスカスカな見た目になったりしかねません。

そこで、mb_strimwidth という関数を利用します。
これは、文字数ではなく幅を考慮して文字列をカットしてくれます。

しかも!!!
指定の文字幅より長い場合だけ、カットして最後に任意の文字列を付けてくれます!
指定の文字幅より短い場合は後ろに文字列を付けません。
お利口ですね。

実際の処理と結果は以下の通りです。

mb_substr との比較(下がstrimwidth)



print mb_substr("123456789012345", 0, 13, "UTF-8");
print mb_substr("12345あいうえおかきくけこ", 0, 13, "UTF-8");
print mb_substr("あいうえお123456789012345", 0, 13, "UTF-8");


print mb_strimwidth("123456789012345", 0, 13, "…", "UTF-8");
print mb_strimwidth("12345あいうえおかきくけこ", 0, 13, "…", "UTF-8");
print mb_strimwidth("あいうえお123456789012345", 0, 13, "…", "UTF-8");
print mb_strimwidth("あいう", 0, 13, "…", "UTF-8");

mb_strimwidth01

mb_strimwdith 関数を利用した場合は、だいたい同じ幅にまるめられていることが分かります。

南本貴之

関連記事

カテゴリー: PHP, PHP 関数
  • LINEスタンプ販売中!「カフィーノ♪」 BRISKオリジナル