| Код | function utf8_truncate($string, $len) { $slen = strlen($string); if ($slen <= $len) { return $string; } if ((ord($string[$len]) < 0x80) || (ord($string[$len]) >= 0xC0)) { return substr($string, 0, $len); } while (ord($string[--$len]) < 0xC0) {}; return substr($string, 0, $len); }
|
Следующая функция обрезает мультибайтную (utf-8) строку от нуля до $len. Но как выяснилось, $len здесь является числом байт, а следовало бы его рассматривать как кол-во печатных знаков. Единственное отличие от substr, кроме отсутствия параметра начала отсчёта - эта функция "подлизывает" хвост обрезанной строки. Необходимо видоизменить функцию, чтобы за $len принималось число символов.
В идеале мне бы не помешал пользовательский эквивалент функции mb_substr(). |