すんげー下らないんだけど
何らかの日本語対応文字コードで記述されている長さ不明の文字列を
単純なサイズ (~~~bytes) 指定で文字列長の上限を設けるかたちで途中で切ることを考えるとき

単純にsubstrで切るとマルチバイト文字の途中で切れるかもしれない、mb_substrで切るとbytesで切れない、
Shift_JISやEUCは2bytesだけどUTF-8などは3bytesと違いがある

やはり、泥臭くても
文字コード判定→マルチバイト文字の長さ n を取得→
指定サイズで切ったあと最後から n bytes分取ってmb_detect_encodingとかにかける→
失敗したら切る場所を指定サイズから1文字少なくしてリトライ
ってやるか、それか文字コード完全決め打ちして少し処理軽減するくらいしかないのだろうか?