= 0xC0)) { return substr($string, 0, $len); } while (--$len >= 0 && ord($string[$len]) >= 0x80 && ord($string[$len]) < 0xC0) {}; return substr($string, 0, $len); } /** * Truncate a UTF-8-encoded string safely to a number of characters. * * @param $string * The string to truncate. * @param $len * An upper limit on the returned string length. * @param $wordsafe * Flag to truncate at nearest space. Defaults to FALSE. * @param $dots * Flag to add trailing dots. Defaults to FALSE. * @return * The truncated string. */ function drupal_truncate_chars($string, $len, $wordsafe = FALSE, $dots = FALSE) { if (drupal_strlen($string) <= $len) { return $string; } if ($dots) { $len -= 4; } if ($wordsafe) { $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 ($dots) { $string .= ' ...'; } return $string; } // THIS IS ONLY FOR TESTING!!! function truncate_utf8($string, $len, $wordsafe = FALSE, $dots = FALSE) { return drupal_truncate_chars($string, $len, $wordsafe, $dots); }