Как посчитать кол-во символов? (UTF-8)

Статус
В этой теме нельзя размещать новые ответы.
Выходит что strlen() именно кол-во байтов меряет
других объяснений у меня нет

Именно так и есть.
А для многобайтных кодировок существуют специальные функции:

PHP:
$string='тест'; // в кодировке UTF-8
var_dump(iconv_strlen($string, 'UTF-8'));
var_dump(mb_strlen($string, 'UTF-8'));
 

Я уж было усомнился в своих словах.
Проверил, PHP 4.3.10-19, PHP 5.1.6, функция strlen возвращает именно кол-во байт в строке.

Добавлено через 16 минут
+ аналогично ещё один сервер с PHP 5.1.6. Везде установлена локаль ru_RU.UTF-8
 
Я уж было усомнился в своих словах.
Проверил, PHP 4.3.10-19, PHP 5.1.6, функция strlen возвращает именно кол-во байт в строке.

Добавлено через 16 минут
+ аналогично ещё один сервер с PHP 5.1.6. Везде установлена локаль ru_RU.UTF-8
Интересно а почему же у меня возвращается кол-во символов, а не байт в UTF.
 
Может всё-таки у тебя обычная ANSI кодировка?)

Попробуй это:
PHP:
$test=base64_decode('0YLQtdGB0YI='); // строка "тест" в UTF-8
var_dump($test, strlen($test), mb_strlen($test,'UTF-8'));
 
Сталкивался с такой проблемой. Установите локаль - setlocale. И все будет ок)
 
int mb_strlen ( string str [, string encoding] )


mb_strlen() returns number of characters in string str having character encoding encoding. A multi-byte character is counted as 1.
Указывая как второй параметр кодировку UTF-8, эта функция хорошо работает и выдает правильное значение.
 
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху