UTF-8で、半角1文字・全角2文字としてカウントして、指定文字数で切り捨てたい時は、PHPではmb_strimwidthを使う。
昔のShift-JISでは、半角英数字が1byteで全角日本語が2byteだったけど、現在の標準であるUTF-8は全角半角に関係なく1-4バイト。
なので単純に文字数やバイト数をカウントするだけでは、半角1文字・全角2文字としてカウント出来ない。
実はPHPには、半角1文字・全角2文字としてカウント専用の関数があって、これらの関数を使えば無問題!
1, mb_strwidth(文字数を返す)
2, mb_strimwidth(指定した文字数で切り捨ててくれる)