Welcome Guest, Not a member yet? Register   Sign In
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;
    }
}




Theme © iAndrew 2016 - Forum software by © MyBB