Как обрезать строку UTF8 в PHP?
У меня есть несколько строк в моем PHP-коде, которые нужно обрезать, если они слишком длинные.
Например, если текст выглядит примерно так:
Привет, я хотел бы сказать тебе, как это замечательно.
Это заменило бы его следующим:
Привет, я бы хотел...
Для этого я сделал простое substr
. Проблема в том, что в UTF8 некоторые символы на самом деле имеют длину в два символа. И у меня были некоторые проблемы с персонажем, который вырезать посередине: Например, когда я пытаюсь вставить измененную строку в базу данных, она выходит из строя.
Вот моя текущая функция:
static function short($string, $max = 255){
if(strlen($string) >= $max){
$string = substr($string, 0, $max - 5).'...';
} return $string;
}
Знает ли кто-нибудь способ заставить эту функцию работать даже для символов UTF8?
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');
Попробуйте с 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;
}
Вы можете использовать метод mb_substr. Смотрите этот полный пример.