どもです。
CSV出力したり、他サイトとデータのやり取りをしたいとき、
Utf-8では全角文字が3byteですが、2byte扱いで切り取りたい場合があります。
そういうときの解決法。
$str = mb_convert_encoding($str, 'SJIS', 'UTF-8');
$str = mb_strcut($str, 0 , $byte, 'SJIS');
$str = mb_convert_encoding($str, 'UTF-8', 'SJIS');
SJISに一度変換してから、SJISとしてmb_strcutを使用するわけです。
でもこれ、いわゆる機種依存文字が来ると死にます。
$str = mb_convert_encoding($str, 'SJIS-win', 'UTF-8');
$str = mb_strcut($str, 0 , $byte, 'SJIS-win');
$str = mb_convert_encoding($str, 'UTF-8', 'SJIS-win');
ちょっと改良。
文字数をカウントするだけなら
strlen(mb_convert_encoding($str, 'SJIS-win', 'UTF-8'))
で特に問題ないんだけどなー!
変換するのはいろいろ怖いからあんまりやりたくないなー。