mb_strimwidthを使えば出来ます。
PHP: mb_strimwidth - Manual


mb_strimwidth ― 指定した幅で文字列を丸める
とのこと。文字数ではなく、文字


しかし注意点として
mb_strimwidthの幅(文字数の考え方) - ブログでサイト制作覚書

文字コードにかかわらず、半角1、全角2、そして、トリムマーカーも含む文字数だとのこと。