ニュース記事の見出しや、エントリー記事のタイトルなど、そのままではタイトルが長すぎたり一覧表示の場合、レイアウトがばらばらになったりするので、なんとか調整したい場合があります。
その場合単純にstrsub関数を使用して、抽出開始場所、バイト数で計算して文字数制限可能なのですが、2バイト文字と1バイト文字が混在する場合、途中で文字化けをおこします。
【substr関数】
string substr( string 文字列, int 開始位置 [, int 長さ ] )
かといって、mb_strsub関数の場合、バイト数ではなく文字列数で計算して抽出するので、指定した文字数以上は表示されないので、2バイトと1バイト文字の混在も回避できるのですが、半角と全角文字の混在した場合には、制限した文字列の長さがことなり、見た目のバランスが良くないです。
【mb_substr関数】
string substr( string 文字列, int 開始位置 [, int 長さ[, string 文字コード]])
>
その両方の利点を手軽に併用可能なのがmb_strimwidth関数です。
マルチバイトで計算するのではなく、1バイト計算で文字数で指定することが可能なので、混在する場合でも文字化けなくほぼ同じ長さで統一して制限することが可能です。
【mb_strimwidth関数】
string mb_strimwidth( string 文字列, int 開始位置 , int 長さ[, string “接尾語” [, string 文字コード]])
ちなみにCSS3ではtext-overflow: ellipsisで文字を省略する同等の仕組みが可能な記述があるようですが、WEBページになるとブラウザ環境がまちまちで、非対応のブラウザを使用するユーザーも多いので、まだあまり実用的ではないようです。