我找到了这个php脚本:
//剥离标签以避免破坏任何html $ string = 用strip_tags($字符串);
if(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的东西是有史以来最好的网站 - &gt;将输出StackOverFlow是...如果我有http://stackoverflow.com这样的东西是有史以来最好的网站 - &gt;将仅输出...因为他没有找到空格和字符串长度&gt; 22.如果在字符串中找到一个点,我如何修改此脚本以剪切文本,以便http://stackoverflow.com是有史以来最好的网站 - &gt;成为http://stackoverflow ......?
答案 0 :(得分: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)
我会检查结尾的字符串,因为你需要删除不完整的单词。该不完整单词的条件是短字符串不以空格结尾或以“!”结尾字符结尾或者只是点。下一个cond是查看字符串结尾后的+1符号是否也是这样的字符。如果它是你只需要从头到尾的任何角色del。这可以通过regexp完成(类似于/ [: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);
}
}
答案 2 :(得分: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;
}