Как обрезать длинный текст методом 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 символов и далее добавит троеточие. Вот в принципе и все о чем я хотел сегодня поведать. Кому не понятно задаем вопросы в комментариях.