2012-04-29 58 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