我正在编写新闻脚本,我想创建摘要功能以从全文内容中获取少量文本。该函数将获取 200 个字符的全文,然后搜索这 200 个字符的最后一个空格。该函数还必须忽略任何 html 或其他代码,并且只显示全文内容的前 200 个字符。
哪个功能最适合我的问题以及如何执行该功能?
CodeIgniter
从框架中签出这个辅助函数:
/**
* Character Limiter
*
* Limits the string based on the character count. Preserves complete words
* so the character count may not be exactly as specified.
*
* @access public
* @param string
* @param integer
* @param string the end character. Usually an ellipsis
* @return string
*/
function character_limiter($str, $n = 500, $end_char = '…')
{
if (strlen($str) < $n)
{
return $str;
}
$str = preg_replace("/\s+/", ' ', str_replace(array("\r\n", "\r", "\n"), ' ', $str));
if (strlen($str) <= $n)
{
return $str;
}
$out = "";
foreach (explode(' ', trim($str)) as $val)
{
$out .= $val.' ';
if (strlen($out) >= $n)
{
$out = trim($out);
return (strlen($out) == strlen($str)) ? $out : $out.$end_char;
}
}
}
您可以使用以下功能:
echo character_limiter($text, 200);
如果需要避开 HTML 标签,可以strip_tags
在调用函数之前使用character_limiter
函数。
最好的解决方案显然是由编辑器手动填写数据库中的指定“摘要”字段。
它将为您在未来省去很多麻烦。
有一个简单的函数叫做substr($string, $position, $length)
,它可以做到这一点。
像这样使用它
$brief = substr($bigContent, 0, 200); //for 200 chars
我使用以下函数来确保我的预告字符串的长度不超过指定的最大长度,但仍保留整个单词。
function teaser( $input, $length = 200)
{
if( strlen($input) <= $length )
return $input;
$parts = explode(" ", $input);
while( strlen( implode(" ", $parts) ) > $length )
array_pop($parts);
return implode(" ", $parts);
}
简短而简单。