Как обрезать строку UTF8 в PHP? - PullRequest
14 голосов
/ 13 декабря 2011

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

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

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

Это заменит это на:

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

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

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

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

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

Ответы [ 3 ]

18 голосов
/ 13 декабря 2011

Все, что вам нужно, это 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');
8 голосов
/ 13 декабря 2011

попробуй с 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;
}
0 голосов
/ 13 декабря 2011

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

...