Блог \ Собственные функции PHP \ Грамотная обрезка строк на PHP

Функция для обрезки строк на PHP

Добрый день!

В данной статье хочу поделиться своей функцией для обрезки строк, которая не только уберет некоторые проблемы в функции substr() в кодировке utf-8, но и будет иметь несколько плюсов.

 

 

Скачать функцию для обрезки строк на php (926,00b)

Преимущества mySubstr();

  1. Не обрывает слова на середине
  2. Подставляет троеточие

 

Код функции:

function mySubstr($text,$char1,$char2)
{
	$text = strip_tags($text); // Удаляем теги
	
	
	$text = mb_convert_encoding($text, "windows-1251", "UTF-8"); // Меняем кодировку на windows-1251 
	$countChars = strlen($text); // Считаем сколько символов в целой строке
	
		if($char2 == '-') {$text = substr($text,$char1);} // варинат функции substr с двумя параметрами
		else{$text = substr($text,$char1,$char2);}// варинат функции substr с тремя параметрами
		
		$text = mb_convert_encoding($text, "UTF-8", "windows-1251");// Меняем кодировку обратно на UTF-8 
		$word = explode(' ',$text);  // разбиваем текст на слова и помещаем в массив
		$countWords = count($word) - 1;  // считаем сколько слов у нас есть
		
		if($char1 < $countChars and $char1 != '0') // Если строка обрезалась с начала текста
		{
			$start= '...'; // Троеточие в начале
			$startWord = 1; 
		}
		else {$startWord = 0;} 
		
		
		if($char2 < $countChars and $char2 != '-')
		{
			$finish= '...';// Троеточие в конце
			$finishWord = $countWords - 1;
		}
		else {$finishWord = $countWords;}
		
		
		// StartWord указывает с какого слова нужно начинать текст (если строка резалась, то со второго, если нет, то с первого)
		// finishWord указывает с какого слова нужно закончить текст (если строка резалась, то с предпоследнего, если нет, то с последнего)
		
		for($startWord;$startWord <= $finishWord; $startWord++) // Перебираем массив со словами,и создаем строку
		{
			$obr_text .= $word[$startWord].' ';
		}
		$text = trim($obr_text); // Удаляем пробелы в конце и в начале строки
		
		return $start.$text.$finish;    // ......
}

	 

Результат работы функции можно поместить либо в переменную, либо вывести с помощью ECHO.

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

echo mySubstr("abcdef", 1, '-');
echo '<p>';    // возвращает "bcdef"
echo mySubstr("abcdef", 1, 3); // возвращает "bcd"
echo '<p>';
echo mySubstr("abcdef", 0, 4); // возвращает "abcd"
echo '<p>';
echo mySubstr("abcdef", 0, 8); // возвращает "abcdef"
echo '<p>';
echo mySubstr("abcdef", -1, '-');    // возвращает "f"
echo '<p>';
echo mySubstr("abcdef", -2, '-');    // возвращает "ef"
echo '<p>';
echo mySubstr("abcdef", -3, 1); // возвращает "d"
echo '<p>';
echo mySubstr("abcdef", 0, -1);  // возвращает "abcde"
echo '<p>';
echo mySubstr("abcdef", 2, -1);  // возвращает "cde"
echo '<p>';
echo mySubstr("abcdef", 4, -4);  // возвращает ""
echo '<p>';
echo mySubstr("abcdef", -3, -1); // возвращает "de"

Приятного пользования!!

Метки: mysubstr(), substr(), php, функция, проблемы, utf-8,

sht.

Спасибо, мне пригодилось. Долго парился сам, не хотелось разбивать текст на отдельные слова, но видимо это самый простой вариант. Было бы отлично если сохранить ещё теги, не косить их?

Андрей

Здравствуйте! Не совсем понял Вашего вопроса ("Было бы отлично если сохранить ещё теги, не косить их?")

Можно поподробней?

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

Имя:*


Email:*


Email:*

Не будет показан

Текст:*



Немного о нас

Да, действительно теперь я не один. В моей команде работают несколько программистов, дизайнер и отличный SMM специалист.

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

*/ ?>

Пишите!