Как обрезать строку UTF8 в PHP?

У меня есть некоторые строки в моем PHP-коде, которые нужно усечь, если они слишком длинны.

Например, если текст выглядит примерно так:

Привет, я хотел бы рассказать вам, как это замечательно.

Он заменит его следующим:

Привет, я хотел бы...

Для этого я сделал простой substr. Проблема в том, что в UTF8 некоторые символы на самом деле являются двумя символами. И у меня были некоторые проблемы с тем, что символ срезается посередине: например, когда я пытаюсь вставить измененную строку в базу данных, она сработает.

Вот моя текущая функция:

static function short($string, $max = 255){
   if(strlen($string) >= $max){
       $string = substr($string, 0, $max - 5).'...';
   } return $string;
}

Кто-нибудь знает способ заставить эту функцию работать даже для символов UTF8?

Ответ 2

попробуйте с mb_substr():

static function short($string, $max = 255){
   if(mb_strlen($string, 'utf-8') >= $max){
       $string = mb_substr($string, 0, $max - 5, 'utf-8').'...';
   } return $string;
}