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