Матвей Земсков

Заметки веб-мастера

Воскресенье, 09 марта 2014 16:51

Обрезка строк с учетом пробелов

Оцените материал
(3 голосов)

Как известно при разработке веб-приложений существует несколько решений одной задачи. В этой заметке я приведу пример трех различных подходов для решения одной задачи. Задача заключается в обрезке строк с учетом пробелов. На самом деле это простая задача, но встречается она часто. Обычно обрезать текст необходимо при показе списка новостей или статей блога. Если просто обрезать строку до определенного количества символов, может сложиться ситуация, что текст заканчивается на полуслове, а это некрасиво. Поэтому при решении данной задачи нужно учитывать пробелом ли заканчивается уменьшенная строка или нет.

Итак, ближе к делу…

Пример №1

PHP

	// Короткое описание статьи без обрезки слов
	function articles_intro($content, $l)
	  {
		  if(strlen($content) > $l)
		  {
			   // преобразовываем в массив
			  $content = str_split($content);
			 while(ord($content[$l]) != 32)
			 {
				--$l;
			 } 	   
			// обрезаем массив
		   $content = array_slice($content,0,$l);
		 }
		
		// обратно в строку
		return implode("",$content)."...";		
	}

Функция в примере №1 работает со строкой как с массивом, сравнивая каждый его элемент (символ строки) с ASCII-кодом пробела. В качестве аргументов принимает строку, которую необходимо укоротить и число - длину выводимого текста после обрезки. Возможно не очень оптимальный подход, но со своей задачей по обрезке строки с учетом пробелов, она справляется. Больше про нее сказать нечего: функция несложная, к тому же в ней есть комментарии.

Пример №2

PHP

	function Truncate($strText, $intLen, $str='...' ) {
		  if(strlen($strText) >= $intLen ) {
		$text = substr($strText, 0, $intLen);
		$text = substr($text, 0, strrpos($text, " "));
		$text .= $str;
		return $text;
		 } else return $strText;
	}

Подход к решению задачи в примере №2 более оптимален. Основан на PHP-функции strrpos(). Аргументы, такие же, как и первой функции. Правда добавляется еще один, в нем можно передать символы, которые будут добавляться к строке после обрезки. По-умолчанию - это многоточие.

Пример №3

PHP

	function subword($str, $length)
	{
		 $new_str = substr($str, 0, strpos($str, " ", $length) ?: $length);
		 return (strlen($new_str) > $length) ? $new_str."..." : $new_str;
	}

Функция в примере №3 самая короткая. Аргументы, передаваемы функции, аналогичны аргументам функций из первого и второго примера. Ключевой момент в этой функции находится в третьей строке, в ней вычисляется позиция пробела в строке, начиная с позиции, до которой нужно обрезать строку (второй аргумент). Таким образом, функция удлиняет строку до конца слова, в случае, если символ, позиция которого передана во втором аргументе функции и до которого нужно укоротить строку не пробел.

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

Прочитано 5716 раз

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


Защитный код
Обновить

Мои услуги

Предлагаю следующие услуги:

  • Верстка шаблона сайта из дизайн-макета для CMS «1С-Битрикс Управление сайтом» и CMS “Joomla”
  • Создание форм различной сложности (обратная связь, анкеты и тп) для указанных CMS
  • Настройка и кастомизация компонентов и модулей для указанных CMS
  • Доработка модулей и компонентов для указанных CMS, добавление нестандартного функционала
  • Разработка лендингов (landing-pages)

По все вопросам обращайтесь через форму обратной связи

Скачать

Предлагаю вашему вниманию: