PHP

Как обрезать длинный текст методом PHP

Как обрезать длинный текст методом PHPИ снова начнем изучать некоторые php функции. Сегодня пришлось реализовать функцию обрезания длинного текста методом создания php функции. Чтобы обрезать длинный текст который ханится в базе данных можно несколькими способами. Почему решил описать эти функции спросите вы? Я сам искал это решение примерно часа два и ничего конкретного в интернете не нашел. Вот только из-за этого и решил описать эти методы. Кто будит искать такие методы найдет здесь.

И так начнем первый метод.

В php есть стандартная функция обрезания длинного текста и называется она так ( substr ). Используеться она следующим способом например вам необходимо вывести не более 400 символов из таблици content и поле text. Ниже приведу пример выборки из базы данных и вывод в двух циклах это foreach и do while. Первый способ обрезания будим делать для цикла foreach. Смотрим код ниже.

Код PHP
	<!--?foreach($comments as $item):?-->
	        <table class="comment" align="center" border="0" cellpadding="0" cellspacing="0">
	            <tbody><tr>
	                <td>
	// это вывод с обрезанием
	                    <div><!--?= substr($item['text'],0 ,400)"...";?--></div>
	                </td>
	            </tr>
	        </tbody></table>
	        <!--?endforeach;?-->
	// В цикле do wile просто подставить так
	                     substr($item['text'],0 ,400)"...",
	// Смотрим пример с do wile хотя его и мало кто использует но покажу.
	do
	{
	printf ("<table class="new_postindex">
	    <tbody><tr>
	        <td>%s</td>
	    </tr>
	</tbody></table>
	",substr($myrow["text"],0,400).'...';
	}
	while ($myrow = mysql_fetch_array($result));
	}

Здесь наверное ничего сложного нет и многие встречались с такими циклами. Теперь разберем по порядку значит стандартная функция для обрезания строки выполяет следующее - как мы видим идет два параметра начальный в нашем случае (0) но может быть и не ноль, и следующее число 400, если сказать простым человечесским языком то можно описать так - начинай считать с 1 символа и до 400 оставляй, а далее просто обрезай текст. Вот и все текст обрезался вродебы все нормально но не все хорошо. Эта стандартная функция обрезает текст качественно только на латинице, а на кирилице будь то кодировка utf8 или windows 1251 в конце на последнем символе можно увидить если браузер опера то просто пустой квадратик, а если мозилла то ромбик черного цвета и знаком вопроса внутри него. Не красиво? Да конечно не красиво, а что делать, а обрезать текст надо. Можно конечно создать ячейку в базе данных и добавлять туда короткий текст в ручную. Но это не выходд. Php создан для облегчения и автоматизации работы динамичесских сайтов. Вот теперь и разберем как реализовать все на автомате.

Вариант второй создадим функцию с названием например str_remow

Код РHP
	<!--?php
	 /// Функция для обрезки символов в строке
	    function str_remow($str, $i)
	    {
	// Здесь приводим в кодировку win
	        $str = iconv('UTF-8','windows-1251', $str);
	// Указываем также с какого по какой символ
	        $str = substr($str, 0, $i);
	// Здесь возвращаем обратно в utf
	        $str = iconv('windows-1251', 'UTF-8', $str);
	// Возвращаем $str
	        return $str;
	    }
	?-->

Вот такая вот не замысловатая функция получилась, на первый взгляд все просто. Но если вы заметили то я два раза меняю кодировку, зачем? Так точно никогда не появляются лишние знаки в конце строки. Если у вас кодировка в win стоит то просто процедуру переделываем наоборот. Я уже не буду тратить место для преобразования из utf в win. Далее мы теперь применим нашу функцию к выводу и обрезанию строки.

Код PHP
	<!--?foreach($comments as $item):?-->
	        <table class="comment" align="center" border="0" cellpadding="0" cellspacing="0">
	            <tbody><tr>
	                <td>
	// это вывод с обрезанием
	                    <div><!--?= str_remow($item['text'],400)"...";?--></div>
	                </td>
	            </tr>
	        </tbody></table>
	        <!--?endforeach;?-->
	// В цикле do wile просто подставить так
	                     str_remow($item['text'],400)"...",
	// Смотрим пример с do wile хотя его и мало кто использует но покажу.
	do
	{
	printf ("<table class="new_postindex">
	    <tbody><tr>
	        <td>%s</td>
	    </tr>
	</tbody></table>
	",str_remow($myrow["text"],400).'...';
	}
	while ($myrow = mysql_fetch_array($result));
	}

Я надеюсь все понятно объяснил. Просто в случае с созданием отдельной php функции вместо переменной $i у нас подставляется число в нашем случае 400. Значит наша функция обрежит текст на 400 символов и далее добавит троеточие. Вот в принципе и все о чем я хотел сегодня поведать. Кому не понятно задаем вопросы в комментариях.
Добавлено: 27 Августа 2013 11:26:01 Добавил: Андрей Ковальчук Нравится 0
Добавить
Комментарии:
Нету комментариев для вывода...