It’s the string cutting helper which deal with both UTF8 and others encodings. Also it remove html tags by default.
[codesyntax lang=”php” lines=”no”]
/** * Takes a string and optionally a maximum length and 'cut' the string to match that length * based on words and not on characters. * * @author kim */ class App_View_Helper_Cut extends Zend_View_Helper_Abstract { /** * do string cut * * @param string $pStr - The string to be cut * @param intefer $pMaxLen - The maximum length cut * @return string */ public function cut($pStr, $pMaxLen = 40) { // filter all the tags $filter = new Zend_Filter_StripTags(); $pStr = trim($filter->filter($pStr)); $returnStr = $this->cutstr($pStr, $pMaxLen, '...'); return $returnStr; } /** * cut string, utf8 by default * * @param $string - string to cut * @param $length - Max length to cut * @param $dot - the tail added to the sub-string * @param $encoding - the encoding of string * @return string */ public function cutstr($string, $length, $dot = '', $encoding = 'utf8') { if (strlen($string) <= $length) { return $string; } $strcut = ''; if (strtolower($encoding) == 'utf8') { $n = $tn = $noc = 0; while ($n < strlen($string)) { $t = ord($string[$n]); if ($t == 9 || $t == 10 || (32 <= $t && $t <= 126)) { $tn = 1; $n++; $noc++; } elseif(194 <= $t && $t <= 223) { $tn = 2; $n += 2; $noc += 2; } elseif(224 <= $t && $t < 239) { $tn = 3; $n += 3; $noc += 2; } elseif(240 <= $t && $t <= 247) { $tn = 4; $n += 4; $noc += 2; } elseif(248 <= $t && $t <= 251) { $tn = 5; $n += 5; $noc += 2; } elseif($t == 252 || $t == 253) { $tn = 6; $n += 6; $noc += 2; } else { $n++; } if ($noc >= $length) { break; } } if ($noc > $length) { $n -= $tn; } $strcut = substr($string, 0, $n); } else { for($i = 0; $i < $length - strlen($dot) - 1; $i++) { if (ord($string[$i]) > 127) { $strcut .= $string[$i] . $string[++$i]; } else { $strcut .= $string[$i]; } } } return $strcut . $dot; } }
[/codesyntax]