Вопрос по php – разбить строку PHP

3

Я нашел этот скрипт PHP:

// strip tags to avoid breaking any html $string = strip_tags($string);

if (strlen($string) > 500) {

<code>// truncate string
$stringCut = substr($string, 0, 500);

// make sure it ends in a word so assassinate doesn't become ass...
$string = substr($stringCut, 0, strrpos($stringCut, ' ')).'... <a href="/this/story">Read More</a>';  } echo $string;
</code>

создать через webbiedave. Теперь мой вопрос, как я могу указать в strrpos для поиска для пробела или точки?

Так что, если я ограничу строку до 22 и если у меня будет что-то вроде StackOverFlow, это будет лучший сайт из всех - & gt; будет выводить StackOverFlow это ... и если бы у меня было что-то вродеhttp://stackoverflow.com самый лучший сайт - & gt; будет выводить только ... потому что он не нашел пробела и длины строки & gt; 22. Как я могу изменить этот скрипт, чтобы вырезать текст, если найти точку в строке такhttp://stackoverflow.com самый лучший сайт - & gt; становитьсяHttp: // StackOverflow ... ?

Ваш Ответ

3   ответа
2

не нарушая слов, но соблюдая ограничения строки, используйтеwordwrap вместо любого другого метода разделения.

$longText = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Suspendisse ut purus a tellus ultrices vulputate. Aliquam posuere facilisis elit ut adipiscing. Nunc auctor dignissim porta. Vestibulum vitae tempor augue. Nam vel odio quis quam gravida ultrices sed a arcu. Phasellus nec odio massa. Duis imperdiet rutrum mi, vitae volutpat nulla convallis quis. Donec dignissim pulvinar mauris id molestie. Duis id mauris augue, id sagittis velit. Ut justo lectus, scelerisque egestas tempor et, facilisis vitae erat. Quisque ut mattis nulla. Donec a justo quis nisi tempus ultrices. Phasellus non dui non dolor tristique tincidunt vitae imperdiet libero. Pellentesque pretium luctus sem.";

$makeLine = wordwrap( $longText, 50, PHP_EOL );

echo $makeLine;

До и после:http://codepad.org/Dqz8qzAy

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

$longText = "...";

$makeLine = wordwrap( $longText, 50, '\r\n' );
$firstSen = array_shift( explode( '\r\n', $makeLine ) );

echo $firstSen; // Lorem ipsum dolor sit amet, consectetur adipiscing...
1

потому что вам нужно удалить слова, которые являются неполными. Условие этого неполного слова состоит в том, что короткая строка не заканчивается пробелом или конечным символом, таким как «!»; или просто точка. Следующим условием является проверка того, является ли знак +1 после конца строки также таким символом. Если это - Вы просто должны удалить любой символ от конца до следующего пробела. Это можно сделать с помощью регулярного выражения (что-то похожее на / [: alfa] + $ /, вероятно, лучше сделать это).

Это простой способ сделать основные вещи, но я думаю, что это хорошее начало.

ПРИМЕР того, что это может быть:

function word_wrap_custom($string, $limit){
$oneWord = explode(' ', $string);
if(count($oneWord) < 2 )
    return $oneWord[0];
$string = substr($string, 0, $limit + 2);

$endchar =  substr($string, $limit, $limit + 1);

$postendchar = substr($string, $limit + 1, $limit + 2);

$arrAccetpEndChar = array(' ', '!', '?', ',', '.', ';', ':');

if(in_array($postendchar, $arrAccetpEndChar) || in_array($endchar, $arrAccetpEndChar))
{
    return $string;
}
else
{
    return preg_replace('/[A-Za-z0-9]+$/', '', $string);
}
}
Error: User Rate Limit Exceeded TGeorge
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded TGeorge
Error: User Rate Limit Exceeded
Error: User Rate Limit Exceeded TGeorge
0

function ShortenText($text, $chars)
{
    $chars = $chars;$text = $text." ";
    $countchars = strlen($text);
    if($countchars > $chars)
    {
        $text = substr($text,0,$chars);
        $text = substr($text,0,strrpos($text,' '));
        $text = $text."...";
    }
    return $text;
}
Error: User Rate Limit Exceededstackoverflow.comError: User Rate Limit Exceeded TGeorge

Похожие вопросы