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

  • Автор темы Автор темы slavon-x86
  • Дата начала Дата начала
S

slavon-x86

Как можно узнать длину строки UTF-8 в битах ?
 
А в байтах можете?
Не могу.

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

Конечно можно циклом посчитать (while (isset($s{$i}))...), но нужен более быстрый способ, т.к. текста много.
 
slavon-x86
обычной функцией для подсчета количества символов, что-то вроде strlen() попробуйте, получите значение в байтах (утверждать не могу)
 
sax_ol
для строк в utf длина строки определяется функцией mb_strlen(), а функция strlen() должна просто кол-во байт возвращать. попробуйте, не прогадаете :rolleyes:
 
для строк в utf длина строки определяется функцией mb_strlen(), а функция strlen() должна просто кол-во байт возвращать. попробуйте, не прогадаете
не верно=)
Обе функции возращают кол-во _символов в строке_. ПРосто mb_strlen() считает мультибайтовые символы за 1(читаем мануалы). Отсюда вывод, что в приципе, енсли исходить из того, что 1 символ=1байт, то применяя strlen() к _любым_ строкам, мы и будем получать ее длину в байтах.

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

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

Обучение наступательной кибербезопасности в игровой форме. Начать игру!