Только для читателей Lifeexample возможно открыть интернет-магазин на Moguta.CMS со скидкой в 15%

<<< Генерация пароля php || Экранирование кавычек в php, javascript и sql >>>

Как в php обрезать строку

21.08.2013
Как в php обрезать строку

Здравствуйте, уважаемые читатели блога LifeExample,в этой статье мы коротко рассмотрим, как в php обрезать строку. Задача обрезания строк в php возникает, как правило, тогда когда необходимая информация слишком длинная и не помещается в предназначенный для нее размер блока на сайте. Такой информацией, например, может являться анонс новости, который необходимо уместить в трех строках и обрезав текст, добавить к концу строки многоточие.

В php обрезать строку можно самыми разными способами, я хочу привести несколько самых распространенных вариантов, и выделись наиболее оптимальный.

Вариант 1 (самый тривиальный способ обрезать строку)

1
$str  = substr($str,0,240).’…’;

Казалось бы, отличный способ, краткий и удобный, но за лаконичностью этого примера скрывается несколько проблем:

  • строка обрезается ровно на 240 символе не взирая на кодировку, другими словами некоторые символы закодированные более чем одним байтом будут разрезаны некорректно и в результате по лучится неизвестный символ, который в свою очередь заменится прекрасным знаком вопроса в контенте сайта.
  • второй минус в том, что часть слова, на которую пришелся 240 символ, может оказаться совершенно не читаемой, или даже изменить смысл предложения.

Вариант 2 (обрезаем строку php до символа пробела)

1
2
3
4
function cropStr($str, $size){
  $str = substr($str,0, $size); // первым этапом надо отрезать строку четко по заданному количеству символов
  return substr($str, 0, strrpos($str, ' ' ));    //получаем позицию последнего пробела и обрезаем до нее строку
}

Такой вариант учитывает попадание начала обрезания строки на середину слова и на выходе возвращает хорошо грамотно обрезанный текст без обрывков слов.
В минусах по-прежнему проблема с кодировкой.

Вариант 3 (правильно обрезаем строку php)

1
2
3
function cropStr($str, $size){
  return mb_substr($str,0,mb_strrpos(mb_substr($str,0,$size,'utf-8'),' ',utf-8),'utf-8');
}

Данный вариант является самым наилучшим и практичным в применении способом в php обрезать строку до символа. Функцией mb_substr мы не просто обрезаем строку php до пробела, но и учитываем кодировку этой строки. Такой подход позволяет избежать проблемы с появлением знаков вопроса после обрезки текста.

Надеюсь данный урок будет полезен начинающим программистам, поскольку именно они чаще всего сталкиваются с такими актуальными задачами как «обрезать строку с конца php» или «php обрезать строку до символа»

Спасибо за внимание, подписывайтесь на обновление блога, в скором времени выйдут интересные статьи.

Чтобы не пропустить публикацию следующей статьи подписывайтесь на рассылку по E-mail или RSS ленту блога.

Нравится

Комментарии

  • Fedor

    Регулярками делается все

    1
    2
    3
    $text = "По словам может сильно разниться обьём текста. ";
    print preg_match("/((\S+[\s-]+){3})/s", $text, $m)? rtrim($m[1]). '...' : $text;
    //3 количество слов

    или

    1
    2
    3
    $string = "По словам может сильно разниться обьём текста. ";
    $length = 12; //Максимально 12 символов
    print preg_replace('/\s[^\s]+$/', '', mb_substr($string, 0, $length, 'UTF-8'));
  • Александр

    К примеру такую функцию я быстрее напишу и запомню

    1
    2
    3
    4
    function cropStr($str, $size){
      $str = substr($str,0, $size); // первым этапом надо отрезать строку четко по заданному количеству символов
      return substr($str, 0, strrpos($str, ' ' ));    //получаем позицию последнего пробела и обрезаем до нее строку
    }

    Чем регулярным выражением

  • Fedor

    1. Вы даже не предложили вариант с обрезкой по колличеству слов
    2. Писать код нынче не модно, код надо хранить в сниппетах редактора IDE который используешь.
    Лень двигатель программиста

    • 1. Частный случай. Можете предложить решение, если считаете это полезным.
      2. IDE — круто, но не все пользуются.

  • Главный эпический косяк этих примеров в том, что они режут строку до последнего пробела, даже если сама строка короче заданной длины. Надо в функции проверку на длину делать.

  • Igor

    function cropStr($str, $size){
    if(mb_strlen($str)>$size)$return_str=mb_substr($str,0,mb_strpos($str,» «,$size,’utf-8′),’utf-8′);
    else $return_str=$str;
    return $return_str;
    }

    • Евжентий

      function cropStr($str, $size){
      if(mb_strlen($str, ‘utf-8′)>$size) //ту про кодировку забыли.
      $return_str=mb_substr($str,0,mb_strpos($str,’ ‘,$size,’utf-8′),’utf-8’);
      else $return_str=$str;
      return $return_str;
      }

      Иначе в некоторых случаях ошибку выдавать будет

  • Алексей

    Пример 3 с моим усовершенствованием (если слишком мало пробелов или строка короче, а также с вариантом добавления символа типа многоточия в конце обрезанной строки):

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    function cropStr($str, $size, $symb) {
        $string = $str;
        if (mb_strlen($str) > $size)
            $string = mb_substr($str,0,mb_strrpos(mb_substr($str,0,$size,'utf-8'),' ',utf-8),'utf-8');
        if (mb_strlen($string) > $size)
            $string = mb_substr($strS);
        if (mb_strlen($str) > mb_strlen($string))
            $string = $string . $symb;
        return $string;
    }

    Пример использования:

    Результат:
    Длинный…

    • Anton

      Спасибо!!!

    • Anton

      Спасибо, работает как надо, предлагаю добавить эту функцию в статью. Не все прочитают комменты.

  • Оставить комментарий

    Не отвечать

    Подписаться на комментарии к этой статье по RSS

    Яндекс.Метрика