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


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

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

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

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

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

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

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

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

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

Author: Dennis, 2011-12-13

3 answers

Все, что вам нужно, это mb_strimwidth():http://php.net/manual/en/function.mb-strimwidth.php

Пример:

mb_strimwidth('Hi, I would like to tell you how wonderful this is.',0,15,'...','utf-8');
 17
Author: Timur, 2011-12-13 04:09:39

Попробуйте с 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;
}
 7
Author: Tudor Constantin, 2011-12-13 04:32:19

Вы можете использовать метод mb_substr. Смотрите этот полный пример.

 1
Author: David Rodrigues, 2011-12-13 04:07:51