PHP — обрезать строку по словам, метод Yii

Если нужно образать строку в php красиво и грамотно, есть стандартная функция substr. Но есть ряд проблем, которые возникают при ее использовании. Вот их список:

  1. Она не работает с русскими символами.
  2. Обрезает строку скажем «где попало». А нужно в идеале по целым словам.

Эти проблемы быстро решаются. Т.к. я работаю в последнее время с YiiFramework, то и решение хотелось бы оформить в его стиле. В таком случае логично создать getter, который будет на выходе нам отдавать уже готовую строку, обрезаную по словам средстами php.

Итак есть у нас getter:


public function getShortText()

{
return $text;
}

Допустим у нас есть свойство в этой модели($this->text), которое содержит полный текст, который нам нужно обрезать. В моем случае это был полный текст материала в добавок с html тэгами. В таком случае у нас появилась еще одна маленькая проблема — нужно удалить все тэги со строки. Для этого нужно прописать следующую строку:


$text=strip_tags($this->text);

Дальше воспользуемся функцией mb_substr — это аналог substr, только можно указывать кодировку символов передаваемой строки.


$pos = mb_strpos($text, ‘ ‘, 155, ‘UTF-8′);  // здесь мы определяем позиции последнего пробела в уже обрезанной строке и позицию с которой нужно начинать поиск.

$text = mb_substr($text, 0, $pos, ‘UTF-8′); // и обрезаем переменную строки до этой позиции, не забываем в кажой функции указывать нужную кодировку, в моем случае UTF-8

Вот и все, нам осталось вернуть с этого метода обработанную строку. В моем случае понадобилось еще добавить троеточие в конце. Также я добавил проверку начальной длины нашей строки, т.к. если она уже меньше нужной нам длины, то обрезать не нужно. В конечном итоге наш getter будет выглядеть так:


public function getShortText(){
$text=strip_tags($this->text);
if(mb_strlen($text, 'UTF-8')>155)
{
$pos = mb_strpos($text, ‘ ‘, 155, ‘UTF-8′);
$text = mb_substr($text, 0, $pos, ‘UTF-8′);
return $text.'...';
}
else
return $text;
}

По сути все. Пользуемся кому нужно.

Спасибо за помощь и подсказки - Veaceslav Medvedev.

PHP — обрезать строку по словам, метод Yii: 5 комментариев

  1. Veaceslav Medvedev

    плюс третий параметр в mb_strrpos идет $offset а не $charset, по документации, я эти функции не юзаю, и никому не советую.

    Обычные strrpos прекрасно со всем справляются, если php настроен правильно, а именно к этому нужно стремится.

Добавить комментарий