【问题标题】:PHP - Summary of article [duplicate]PHP - 文章摘要[重复]
【发布时间】:2012-04-29 09:23:05
【问题描述】:

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

哪个功能最适合我的问题以及如何执行该功能?

【问题讨论】:

  • 您在发布问题之前尝试过什么?
  • 不,因为我不知道哪个函数最适合这样的问题

标签: php function article summary


【解决方案1】:

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标签,可以在调用character_limiter函数之前使用strip_tags函数。

【讨论】:

    【解决方案2】:

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

    以后可以省去很多麻烦。

    【讨论】:

    • 我也有这个字段,但是如果文章作者忘记或不想输入摘要,这是备用。
    【解决方案3】:

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

    像这样使用它

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

    【讨论】:

    • 我相信它比简单的substr 需要更多的逻辑。这个想法是在适合 200 长度的最后一个单词之后结束文本,否则文章可能会在单词中间结束。
    • @mazzucci,哦.. 请不要开始说这可能有多复杂,我已经为此编写了一个忙碌的模块。 :P
    【解决方案4】:

    我使用以下函数来确保我的 Teaser 字符串的长度不超过指定的最大长度,但仍保留整个单词。

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

    简短而简单。

    【讨论】:

    • 如果您觉得需要在缩短的字符串末尾添加“...”之类的内容,只需将返回行扩展为:return implode(" ", $parts) . "...";
    猜你喜欢
    • 2010-12-13
    • 2014-09-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-12
    相关资源
    最近更新 更多