PHPで全角半角混じった文字のバイト数(≒幅)の処理のための関数のメモです。
shift-jisなら全角は2バイトと決め打ちしても良さそうですが、主流のUTF-8では全角は3バイト(一部2バイト)で、見た目とバイト数は一致しません。
mb_strwidthは全角文字(マルチバイト文字)は2、いわゆる半角英数は1で”文字列の幅”を返します。また、mb_strimwidthは同様に文字列の幅で切り取りを行います。第4引数に「・・・」などとすると、切り取った文字列のあとに「・・・」を足してくれます。(それくらいはPHPでもすぐにできるので、無くてもこまらない機能ですが。)
長さに関係なくレイアウトを維持したい場合などに有用でWeb向きの関数です。mb_strwidthで文字列の長さを確認して、mb_strimwidthで切り取るという感じで使うことが予想されます。ちなみにsubstrのように、後ろから何文字切り抜くというような使い方はできません。そのときはmb_substrを使うべきだと思います。
なお、エンコードの指定は確実に行いましょう。
リファレンス「mb_strwidth」
リファレンス「mb_strimwidth」