• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

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

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

slavon-x86

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

slavon-x86

А в байтах можете?
Не могу.

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

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

acorn

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

acorn

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

vital

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

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

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

acorn

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

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