2012-04-29 2 views
-8

Я работаю над новостным сценарием, и я хотел бы создать сводную функцию, чтобы получить мало текста из полнотекстового контента. Функция получит 200 символов полного текста, а затем будет искать последнее пространство этих 200 символов. Функция также должна игнорировать любой html или другой код и показывать только первые 200 символов полного текстового содержимого.PHP - Резюме статьи

Какая функция является лучшей для моей проблемы и как это сделать?

+3

вы что-то пробовали, прежде чем размещать свой вопрос? – ilanco

+0

нет, потому что я не знаю, какая функция лучше всего подходит для такой проблемы – user1257255

+4

, которую вы должны написать. –

ответ

4

Checkout эта вспомогательная функция от 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

0

Существует простая функция, называемая substr($string, $position, $length), которая может это сделать.

Используйте его как

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

Я считаю, что это требует немного логики, чем простой 'substr'. Идея состоит в том, чтобы закончить текст после последнего слова, которое будет соответствовать длине 200, иначе статья может закончиться посредине слова. –

+0

@mazzucci, Oh .. Пожалуйста, не начинайте с того, насколько сложным это может быть, я уже закодировал суетливый модуль для этого. : P – Starx

0

я использую следующую функцию, чтобы убедиться, что длина моей тизер строки не превышает указанную MaxLength, но до сих пор хранит целые слова.

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

Смежные вопросы