PHP: Отличия strlen() от mb_strlen()

Функции strlen() и mb_strlen() предназначены для измерения длины строки, но они отличаются подходом к обработке символов и кодировок.

Основные отличия



Функция strlen()
  • Что делает: Возвращает количество байтов в строке.
  • Поддерживаемые кодировки: Однобайтовые кодировки (ASCII, ISO-8859-* и т.д.).
  • Когда использовать: Если работа ведётся с латиницей или символами, которые занимают один байт.

Функция mb_strlen()
  • Что делает: Возвращает количество символов в строке.
  • Поддерживаемые кодировки: Многобайтовые кодировки (UTF-8, UTF-16, Shift_JIS и т.д.).
  • Когда использовать: Если работа ведётся с кириллическими символами, китайскими иероглифами или другими символами, занимающими несколько байт.

Пример разницы


$str_utf8 = "Привет, мир!";

// strlen() возвращает количество байтов
echo strlen($str_utf8); // Вывод: 24 (12 символов × 2 байта на символ в UTF-8)

// mb_strlen() возвращает количество символов
echo mb_strlen($str_utf8, 'UTF-8'); // Вывод: 12 (количество символов)

Когда использовать


  • strlen(): Для работы с однобайтовыми символами и ASCII-строками.
  • mb_strlen(): Для работы с мультбайтовыми символами и UTF-8.

Важные моменты


  • Если пренебречь использованием mb_strlen() при работе с UTF-8, можно столкнуться с некорректным определением длины строки.
  • Всегда указывайте кодировку в mb_strlen(), чтобы избежать неожиданных результатов.


Автор:  16.11.2025 06:52:03 pm