Обрезка текста средствами php

Опубликовано 2012.02.11 в разделе Php

Обрезать текст можно по-разному. Самая простая функция-это substr. Этой функции нужно передать 3 аргумента. Первый-сама строка,второй-с какого символа начать обрезать текст(нумерация начинается с нуля), и третий-сколько символов обрезать.
  1. $a = 'English Message';
  2. $b = substr($a, 0, 7);
  3. echo $b;//Выведет 'English'
  4. $c = substr($a,8,7);
  5. echo $c;//Выведет 'Message'
С русским текстом такая функция не всегда прокатит, поэтому нужно использовать mb_substr. Работает она точно также.
  1. $a = 'Сама строка,которую нужно обрезать.';
  2. $b = mb_substr($a, 0, 4);
  3. echo $b;//Выведет 'Сама'
  4. $c = mb_substr($a, 5, 6);
  5. echo $c;//Выведет 'строка'
Если мы хотим добавить многоточие в том случае, когда строка обрезана - то нужно сравнить длину строки с длинной обрезаемого текста.
  1. $a = 'Сама строка,которую нужно обрезать.';
  2. $lenght = 5;
  3. $b = mb_substr($a, 0, $lenght);
  4. if (mb_strlen($a) > $lenght) {
  5. $b .= '...';
  6. }
  7. echo $b;
Где $lenght - длинна обрезаемого текста. Или просто сравнить исходную строку и обрезанную. Но это частный случай.
  1. $a = 'Сама строка,которую нужно обрезать.';
  2. $b = mb_substr($a, 0, 10);
  3. if ($a != $b) {
  4. $b .= '...';
  5. }
  6. echo $b;
Чтобы обрезать по пробелу, то есть взять например 5 первых слов-то строку следует разделить по пробелам и взять первые 5 элементов.Вот так:
  1. $str='Этот текст имеет большое количество
  2. пробелов и состоит из нескольких слов';
  3.  
  4. //разбиваем на массив
  5. $arr_str = explode(" ", $str);
  6. //берем первые 6 элементов
  7. $arr = array_slice($arr_str, 0, 6);
  8. //превращаем в строку
  9. $new_str = implode(" ", $arr);
  10.  
  11. // Если необходимо добавить многоточие
  12. if (count($arr_str) > 6) {
  13. $new_str .= '...';
  14. }
  15.  
  16. echo $new_str;//Выведет 'Этот текст имеет большое количество пробелов и...'
Ну и чтоб просто добавить в конце любой строки многоточие-можно дописать точки так:
  1. $str = 'My string';
  2. $str .= '...';
  3. echo $str;//Выведет 'My string...'

9 Комментариев

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

  1. Гость 2016/10/04

    Здравствуйте, как это можно реализовать в модуле комментариев? Мне нужно, чтобы комментарий юзера оберзался по пробелу например после двухсот символов.

    Ответить

    1. Админ 2016/10/05

      Добрый день.
      Можно через функции модуля views так обрезать, а именно

      1. $str='Это длинный комментарий - абстрактные классы используются для создания семейства объектов, обладающих единым интерфейсом. Также они используются, когда нужно запретить создание объекта некоторого класса.';
      2. $par['max_length']=200; //количество символов
      3. $par['word_boundary']=true; //обрезать только целые слова
      4. $par['html']=true; //строка может содержать html
      5. $str=views_trim_text($par,$str);

      http://php-include.ru/stati/obrezka-teksta-sredstvami-views

      Далее в хуке hook_comment_presave
      1. /**
      2.  * Implements hook_comment_presave().
      3.  */
      4. function ИМЯ_МОДУЛЯ_comment_presave($comment){
      5. $par['max_length']=200; //количество символов
      6. $par['word_boundary']=true; //обрезать только целые слова
      7. $par['html']=true; //строка может содержать html
      8. $comment->comment_body['und'][0]['value'] = views_trim_text($par, $comment->comment_body['und'][0]['value']);
      9. }

      Ответить

  2. Гость 2014/01/24

    День добрый! Как можно обрезать, чтоб такие:
    9.0356, 99.356445, 999.34 и 5 (у меня бывают такие случаи)

    Получились такими:
    9.03, 99.35, 999.34 и 5

    Ответить

    1. Админ 2014/01/24

      Можно так сделать:

      1. $a = 9.0356;
      2. $a = (int)($a*100) / 100;

      Ответить

      1. Гость 2014/01/24

        Благодарю!

        Ответить

  3. Гость 2013/08/02

    Спасибо,полезно, но вот бы еще к этой функции дополнение, чтобы троеточие выводилось если текст обрезан, иначе... Может подскажите как такое реализовать? Заранее спасибо..

    Ответить

    1. Админ 2013/08/04

      Да, пожалуйста. Дополнил статью, изучайте.

      Ответить

      1. Гость 2013/08/04

        Вот! точно))) Сам сравнить не догадался))) спасибо!

        Ответить

  4. Гость 2013/01/27

    полезная статья, спасибо!

    Ответить

Ваш комментарий успешно создан

Ваш комментарий

  • Для выделения кода оберните его в тэги <code> и </code>
  • Отметьте дом