• 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
character_limiter problems

#1
[eluser]louis w[/eluser]
If there are no more words in a string, and it ends in a period, the $end_char should not be appended.

Example:

Code:
$string = 'Testing this out ok.';
echo character_limiter($string, 18);
            
// Result: Testing this out ok.…

#2
[eluser]sophistry[/eluser]
interesting. EDIT: by the way, that function has other problems, like try sending it a long string (longer than the limit value) and you'll see that it returns the whole "word" and appends the ellipsis. it's because the explode() on the space character cannot explode anything.

you could look at the word_limiter and see if it could work for you. it's probably even faster than the current character limiter.

that character_limiter() function needs an overhaul anyway:

here's how a smarty plugin writer (mohrt - also has been here on CI forums) handles character limiting..
Code:
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/


/**
* Smarty truncate modifier plugin
*
* Type:     modifier<br>
* Name:     truncate<br>
* Purpose:  Truncate a string to a certain length if necessary,
*           optionally splitting in the middle of a word, and
*           appending the $etc string or inserting $etc into the middle.
* @link http://smarty.php.net/manual/en/language.modifier.truncate.php
*          truncate (Smarty online manual)
* @author   Monte Ohrt <monte at ohrt dot com>
* @param string
* @param integer
* @param string
* @param boolean
* @param boolean
* @return string
*/
function smarty_modifier_truncate($string, $length = 80, $etc = '...',
                                  $break_words = false, $middle = false)
{
    if ($length == 0)
        return '';

    if (strlen($string) > $length) {
        $length -= strlen($etc);
        if (!$break_words && !$middle) {
            $string = preg_replace('/\s+?(\S+)?$/', '', substr($string, 0, $length+1));
        }
        if(!$middle) {
            return substr($string, 0, $length).$etc;
        } else {
            return substr($string, 0, $length/2) . $etc . substr($string, -$length/2);
        }
    } else {
        return $string;
    }
}


Digg   Delicious   Reddit   Facebook   Twitter   StumbleUpon  


  Theme © 2014 iAndrew  
Powered By MyBB, © 2002-2020 MyBB Group.