Index: includes/unicode.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/unicode.inc,v retrieving revision 1.27 diff -u -r1.27 unicode.inc --- includes/unicode.inc 21 Oct 2007 18:59:01 -0000 1.27 +++ includes/unicode.inc 18 Dec 2007 03:57:18 -0000 @@ -209,22 +209,26 @@ * The truncated string. */ function truncate_utf8($string, $len, $wordsafe = FALSE, $dots = FALSE) { - $slen = strlen($string); - if ($slen <= $len) { + if (drupal_strlen($string) <= $len) { return $string; } + if ($dots) { + $len -= 4; + } if ($wordsafe) { - $end = $len; - while (($string[--$len] != ' ') && ($len > 0)) {}; - if ($len == 0) { - $len = $end; + $string = drupal_substr($string, 0, $len + 1); // leave one more character + if ($last_space = strrpos($string, ' ')) { // space exists AND is not on position 0 + $string = substr($string, 0, $last_space); + } else { + $string = drupal_substr($string, 0, $len); } + } else { + $string = drupal_substr($string, 0, $len); } - if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) { - return substr($string, 0, $len) . ($dots ? ' ...' : ''); - } - while (--$len >= 0 && ord($string[$len]) >= 0x80 && ord($string[$len]) < 0xC0) {}; - return substr($string, 0, $len) . ($dots ? ' ...' : ''); + if ($dots) { + $string .= ' ...'; + } + return $string; } /**