Как обрезать строку в PHP до слова, ближайшего к определенному количеству символов? - PullRequest
171 голосов
/ 17 сентября 2008

У меня есть фрагмент кода, написанный на PHP, который извлекает блок текста из базы данных и отправляет его виджету на веб-странице. Оригинальный блок текста может быть длинной статьей или коротким предложением или двумя; но для этого виджета я не могу отобразить больше, скажем, 200 символов. Я мог бы использовать substr (), чтобы обрезать текст на 200 символов, но результат был бы обрезан в середине слова - что я действительно хочу - обрезать текст в конце последнего слова до 200 символов.

Ответы [ 26 ]

0 голосов
/ 28 января 2016

Добавлены операторы IF / ELSEIF в код из Dave и AmalMurali для обработки строк без пробелов

if ((strpos($string, ' ') !== false) && (strlen($string) > 200)) { 
    $WidgetText = substr($string, 0, strrpos(substr($string, 0, 200), ' ')); 
} 
elseif (strlen($string) > 200) {
    $WidgetText = substr($string, 0, 200);
}
0 голосов
/ 26 февраля 2013

Я знаю, что это старо, но ...

function _truncate($str, $limit) {
    if(strlen($str) < $limit)
        return $str;
    $uid = uniqid();
    return array_shift(explode($uid, wordwrap($str, $limit, $uid)));
}
0 голосов
/ 09 марта 2018

Я считаю, что это самый простой способ сделать это:

$lines = explode('♦♣♠',wordwrap($string, $length, '♦♣♠'));
$newstring = $lines[0] . ' &bull; &bull; &bull;';

Я использую специальные символы, чтобы разделить текст и вырезать его.

0 голосов
/ 09 февраля 2014

Я использовал это раньше

<?php
    $your_desired_width = 200;
    $string = $var->content;
    if (strlen($string) > $your_desired_width) {
        $string = wordwrap($string, $your_desired_width);
        $string = substr($string, 0, strpos($string, "\n")) . " More...";
    }
    echo $string;
?>
0 голосов
/ 22 декабря 2018

Используйте это:

следующий код удалит ','. Если у вас есть какой-либо другой символ или подстрока, вы можете использовать это вместо ','

substr($string, 0, strrpos(substr($string, 0, $comparingLength), ','))

// если у вас есть другая строковая учетная запись для

substr($string, 0, strrpos(substr($string, 0, $comparingLength-strlen($currentString)), ','))
0 голосов
/ 01 апреля 2014

Может быть, это кому-нибудь поможет:

<?php

    $string = "Your line of text";
    $spl = preg_match("/([, \.\d\-''\"\"_()]*\w+[, \.\d\-''\"\"_()]*){50}/", $string, $matches);
    if (isset($matches[0])) {
        $matches[0] .= "...";
        echo "<br />" . $matches[0];
    } else {
        echo "<br />" . $string;
    }

?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...