Съкращение на текст без разсичане на думи

StormBreaker

Registered
Сега си разглеждах един от моделите в един проект и се сетих колко много хора от тук ползват само substr за да режат текст или заглавие на определен брой символи.
Та реших да споделя тази функция, която пак реже текст, но само на празни места - не реже думи.

PHP:
/**
* Реже текст без да разсича думи
 * 
* @param string $str - Текста
 * @param int $len - Брой символи
 * @param string $dots - Какво да сложи след като съкрати текста
 * @return string - Обработения текст
 */
public function CutToWord($str, $len, $dots = '')
{
	if ( mb_strlen($str, 'UTF-8') < $len )
		return $str;
	
	for ( $i = $len; $i > 0; $i-- )
		if ( mb_substr($str, $i, 1, 'UTF-8') == ' ' )
			return mb_substr($str, 0, $i, 'UTF-8').$dots;
	
	return mb_substr($str, 0, $len, 'UTF-8').$dots;
}

Ползва се така: CutToWord('teksta za rqzane', 13, '...');
Ще върне 'teksta za...', няма да среже последната дума. А ако текста е само от една дума, нещо като CutToWord('tekstazarqzane', 13); няма да има избор и ще я съкрати след 13тия символ.

Надявам се да не виждам заглавия като това по средата на тая тема :D
http://web-tourist.net/forum/viewtopic.php?t=761&postdays=0&postorder=asc&start=828

ПП. Работи за UTF-8 в този си вариант
 
PHP:
public function CutToWord($str, $len, $dots = '', $enc = "UTF-8")

{

	if ( mb_strlen($str, $enc) < $len )

		return $str;

	

	for ( $i = $len; $i > 0; $i-- )

		if ( mb_substr($str, $i, 1, $enc) == ' ' )

			return mb_substr($str, 0, $i, $enc).$dots;

	

	return mb_substr($str, 0, $len, $enc).$dots;

}
Не всички работят с UTF-8, so the right way.
 

Back
Горе