как нарезать текст определенной длины с помощью php?

Я хочу получить некоторые значения полей из базы данных и представить их в формате html.

но некоторые из них длиннее ширины div, поэтому я хотел отрезать их и добавить 3 точки после них, если они длиннее, скажем, 30 символов.

windows vs mac os x-> windows vs m...
threads about windows vista -> threads about win...

Как я могу это сделать?


person ajsie    schedule 30.01.2010    source источник
comment
дубликат stackoverflow.com/questions/1262201/cut-strings-short-php   -  person ax.    schedule 30.01.2010
comment
(примечание) chop() удаляет пробелы (или другие символы) с конца строки. Более подходящим термином для вашего варианта использования является truncate. Три точки на самом деле называются многоточием и технически являются одним символом: или … в качестве объекта HTML.   -  person Gordon    schedule 30.01.2010


Ответы (4)


Если вам нужно выполнить подобную функциональность более одного раза, рассмотрите эту функцию:

function truncate($string, $limit, $break = '.', $pad = '...')
{
    // return with no change if string is shorter than $limit
    if(strlen($string) <= $limit) return $string;

    // is $break present between $limit and the end of the string?
    if(false !== ($breakpoint = strpos($string, $break, $limit)))
    {
        if($breakpoint < strlen($string) - 1)
        {
            $string = substr($string, 0, $breakpoint) . $pad;
        }
    }

    return $string;
}

Использование:

echo truncate($string, 30);
person Dominic Barnes    schedule 30.01.2010

Судя по вашим примерам, вы, кажется, не заботитесь о сохранении слов, так что вот оно:

if (strlen($str) > 30)
{
    echo substr($str, 0, 30) . '...';
}
person Alix Axel    schedule 30.01.2010

Если вы используете Smarty, вы можете использовать обрезать модификатор.

{myLongText|truncate:30:'...':true}

Кстати, такая функция должна быть в любом приличном шаблонизаторе.

person Frosty Z    schedule 26.06.2012

Проверьте wordwrap(), это должно быть то, что вы ищете за.

person Xorlev    schedule 30.01.2010