Обрезать лучше всего до пробела, а так выше правильно сказали это все из-за мультибайтовой кодировки.
$text = "Текст который надо обрезать до пробела, очень большой текст бла бла бла";
$text = preg_replace("/^(.{30}[^\,\s]*[\,\s])(.+)$/ui","\\1",$text) ;
echo $text;