Как можно узнать длину строки Utf-8 в битах ?

slavon-x86

Well-known member
18.12.2005
215
0
#2
Не могу.

Проблема в том что к примеру в строке:
$s='zй';
буква 'z' будет использовать 1 байт
а буква 'й' будет использовать 2 байта

Конечно можно циклом посчитать (while (isset($s{$i}))...), но нужен более быстрый способ, т.к. текста много.
 

acorn

PHP Developer
29.08.2004
585
3
#3
slavon-x86
обычной функцией для подсчета количества символов, что-то вроде strlen() попробуйте, получите значение в байтах (утверждать не могу)
 

acorn

PHP Developer
29.08.2004
585
3
#4
sax_ol
для строк в utf длина строки определяется функцией mb_strlen(), а функция strlen() должна просто кол-во байт возвращать. попробуйте, не прогадаете :rolleyes:
 

vital

Больной Компом Детектед
29.01.2006
2 432
34
#5
для строк в utf длина строки определяется функцией mb_strlen(), а функция strlen() должна просто кол-во байт возвращать. попробуйте, не прогадаете
не верно=)
Обе функции возращают кол-во _символов в строке_. ПРосто mb_strlen() считает мультибайтовые символы за 1(читаем мануалы). Отсюда вывод, что в приципе, енсли исходить из того, что 1 символ=1байт, то применяя strlen() к _любым_ строкам, мы и будем получать ее длину в байтах.

А вообще.. посчитать кол-во байт\бит на пхп в строке.. хм.
Решение в лоб:
Проходим строку посимвольно, каждый элемент проверяя на вхождение в латинский алфаваит, и прочие однобайтные символы входит - сумма+1, не входит - сумма+2.

Получите количество байт. Как в биты перевести самостоятельно сообразите?
 

acorn

PHP Developer
29.08.2004
585
3
#6
Обе функции возращают кол-во _символов в строке_. ПРосто mb_strlen() считает мультибайтовые символы за 1(читаем мануалы). Отсюда вывод, что в приципе, енсли исходить из того, что 1 символ=1байт, то применяя strlen() к _любым_ строкам, мы и будем получать ее длину в байтах.
разве применив функцию strlen() к мультибайтовой строке мы не получим кол-во байт, а не символов? (про это я и говорил, это человеку и надо)