Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Скорректировать следующую функцию.


Автор: мухр 29.8.2005, 04:24
Код

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().

Автор: -=Ustas=- 29.8.2005, 09:33
А чем тебя не устраивает mbstring, или поддержки нет? Может тогда iconv попробовать.

Автор: мухр 29.8.2005, 09:53
Поддержки нет. Временно.
А iconv - это же для перевода кодировок. Как ты предлагаешь тут с ней работать?

Автор: -=Ustas=- 29.8.2005, 10:52
Случайно наткнулся, посмотри, должно помочь - http://forum.dklab.ru/php/advises/Utf8_Functions.html.

Автор: мухр 30.8.2005, 03:16
smile Как чудесно. Спасибо.

Автор: -=Ustas=- 30.8.2005, 08:19
Заходи, если что ;)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)