Обрезка текста средствами php

Romaldo
На сайте с 10.02.2008
Offline
185
3146

Приветствую.

Имеется плагин выводящий последние комментарии к материалам.

Выводятся этой частью кода:

<div style="<?php echo $params->get('show_avatar') ? 'margin-left: 42px;' : '';?>line-height: normal;">
<span style="width: 100%;"><a href="<?php echo $link;?>"><?php echo $comment->title;?></a></span>
<span style="display: block;margin-top: 3px;"><?php echo CStringHelper::escape($comment->comment); ?></span>
</div>

Бывает, что комментарий огромный, а виду того, что выводится это дело в вертикальном модуле, сильно портит внешний вид страницы.

Можно конечно задать фиксированный размер дива, и спрятать не помещающийся в него текст, но ведь это лишний вес, да и вероятно ПС не обрадуются такому варианту.

Есть ли простой метод обрезки текста средствами php, с учетом того, что это выводит комментарий:

<?php echo CStringHelper::escape($comment->comment); ?>

temniy
На сайте с 15.03.2008
Offline
257
#1
⭐ Лучший хостинг от 4 евро, VPS от 6 евро, VPN недорого - разные локации - любые карты - скидки до 20% - https://fornex.com/c/ffi2e3/ru/services/
[Удален]
#2

если хотите просто обрезать строку до нужной длины, то

$b = substr($a, 0, 300);

где $a комментарий в начальном ввиде, 300 - длина комментария, до которой нужно обрезать, $b - обрезанная строка

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

$d=1;

$i=strlen($b);;

while (($d==1)and($i!=0))

{

if ($b[$i]==" ")

{

$d=0;

$b = substr($b, 0, $i);

}

$i=$i-1;

}

Romaldo
На сайте с 10.02.2008
Offline
185
#3

Как это применить на конкретном коде, который я показал в начале темы?

То есть, выводится комментарий так <?php echo CStringHelper::escape($comment->comment); ?>

Что нужно добавить?

[Удален]
#4

Переменной $a присвойте то, что вы выводите. Прогоните через код, который я написал и выводите переменную $b

Только я не знаю что у вас с кодировками, но вроде должно работать

DZ
На сайте с 03.02.2011
Offline
2
#5

Пример, для кодировки UTF-8. Для другой кодировки можно поменять указание для модуля mb_string. Текст не будет обрезан на середине слова.


mb_internal_encoding( 'UTF-8' );

function textCut( $str, $len )
{
if( $len >= mb_strlen( $str ) )
return $str;

$str_cut = mb_substr( $str, 0, $len );

$space_pos = mb_strrpos( $str_cut, " " );
$break_pos = mb_strrpos( $str_cut, "\n" );

$pos = max( $break_pos, $space_pos );

$str = $pos !== false ? mb_substr( $str_cut, 0, $pos ) : mb_substr( $str_cut, 0, $len - 3 );

return $str;
}

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий