2012-04-29 57 views
-8

我正在研究新闻脚本,我想创建摘要函数以从全文内容中获取很少的文本。该函数将获得200个全文字符,然后搜索这200个字符的最后一个空格。该函数还必须忽略任何html或其他代码,并只显示全文内容的前200个字符。PHP - 文章摘要

哪个函数最适合我的问题以及如何实现该功能?

+3

在发布您的问题之前,您有没有尝试过任何东西? – ilanco 2012-04-29 09:26:43

+0

不,因为我不知道哪个函数最适合这样的问题,例如这个 – user1257255 2012-04-29 09:28:38

+4

你必须写。 – 2012-04-29 09:29:18

回答

4

结帐从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函数。

3

最好的解决方案显然是手动编辑器填充的数据库中指定的“摘要”字段。

这将为您节省很多头痛的未来。

+0

我也有这个领域,但这是后备如果文章的作者忘记或不想进入总结。 – user1257255 2012-04-29 09:32:26

0

有一个简单的函数substr($string, $position, $length),可以做到这一点。

使用它像

$brief = substr($bigContent, 0, 200); //for 200 chars 
+0

我相信它需要比简单的'substr'更多的逻辑。这个想法是在最后一个单词之后结束文本,以适应200的长度,否则文章可能会在一个单词的中间结束。 – 2012-04-29 09:37:27

+0

@mazzucci,哦..请不要着手这可能是多么复杂,我已经编写了一个忙碌的模块。 :P – Starx 2012-04-29 09:58:27

0

我用下面的功能,以确保我的传情字符串的长度不超过规定的最大长度,但仍保持完整的词。

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); 
} 

简而言之。

+0

如果您觉得需要在缩短字符串的末尾加上“...”之类的内容,只需将返回行扩展为:'return implode(“”,$ parts)。 “......”;' – Repox 2012-04-29 09:40:32