Question

I'm working on news script and I would like to create summary function to get little of text from full text content. The function would get 200 characters of full text and then it would search for last space of these 200 characters. The function must also ignore any html or other code and show only first 200 characters of full text content.

Which function is the best for my problem and how to do that function?

Was it helpful?

Solution

Checkout this helper function from the CodeIgniter framework:

/**
* 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;
        }
    }
 }

You can use the function:

echo character_limiter($text, 200);

If you need to avoid HTML tags, you can use strip_tags function before calling the character_limiter function.

OTHER TIPS

The best solution would be apparently a designated "summary" field in the database filled by the editor manually.

It will save you a lot of headaches in the future.

There is a simple function called substr($string, $position, $length), which can do this.

Use it like

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

I use the following function to make sure that the length of my teaser string doesn't exceed the specified maxlength, but still keeps whole words.

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

Short and simple.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top