3

我找到了这个 php 脚本:

// 剥离标签以避免破坏任何 html $string = strip_tags($string);

如果 (strlen($string) > 500) {

// 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;

由 webbiedave 创建。现在我的问题是如何在 strrpos 中指定找到空格或点?

因此,如果我将字符串限制为 22 并且如果我有类似 StackOverFlow 的东西是有史以来最好的网站 --> 将输出 StackOverFlow 是 ... 如果我有类似http://stackoverflow.com的东西是有史以来最好的网站 -- > 只会输出 ... 因为他没有找到空格和字符串长度 > 22 。如果在字符串中找到一个点,我该如何修改这个脚本来剪切文本,所以http://stackoverflow.com是最好的网站 - -> 变成http://stackoverflow ... ?

4

3 回答 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...
于 2012-04-13T08:49:42.113 回答
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);
}
}
于 2012-04-13T08:58:54.947 回答
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;
}
于 2012-04-13T08:55:02.633 回答