「30文字以上の場合は、30文字にして最後に”…”をつける」
という風にしたい場合はけっこうあります。
本文を抜粋表示したい時などです。
しかし、『30文字以上はまるめる』という時に、本当にやりたいこととしては、
『指定の枠に収まらない文字をカットする』ということです!
『指定の枠に収まらない文字をカットする』がやりたい時に、
「30文字でまるめる」という風に文字数で処理するのは問題があります。
半角英数字と全角文字の表示サイズが違うので、
全角文字30文字と半角文字30文字ではかなり長さが変わってきます。
結果、予期せぬ表示くずれが発生したり、逆にスカスカな見た目になったりしかねません。
そこで、mb_strimwidth という関数を利用します。
これは、文字数ではなく幅を考慮して文字列をカットしてくれます。
しかも!!!
指定の文字幅より長い場合だけ、カットして最後に任意の文字列を付けてくれます!
指定の文字幅より短い場合は後ろに文字列を付けません。
お利口ですね。
実際の処理と結果は以下の通りです。
mb_substr との比較(下がstrimwidth)
1 2 3 4 5 6 7 8 9 10 11 12 | 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_strimwdith 関数を利用した場合は、だいたい同じ幅にまるめられていることが分かります。
南本貴之