РецептСтрокиСредний

Подсчёт символов UTF-8 без путаницы с байтами

Для большинства текстовых ограничений используйте mb_strlen($text, 'UTF-8'); для пользовательских графем — grapheme_strlen().

mb_strlen($text, 'UTF-8')

Готовый вариант

<?php
function textLength(string $text): int {
    return mb_strlen($text, 'UTF-8');
}

Что считается

mb_strlen() считает кодовые точки выбранной кодировки. Символ с комбинируемым акцентом и некоторые эмодзи могут визуально быть одним знаком, но состоять из нескольких кодовых точек.

Графемы

Если ограничение должно совпадать с пользовательским восприятием, применяйте grapheme_strlen() из Intl. Сначала проверьте наличие функции и зафиксируйте поведение fallback.

Проверка результата

Добавьте тесты для ASCII, кириллицы, пустой строки, emoji и последовательности с combining mark. Не используйте один случай «Привет» как доказательство корректности для всего Unicode.

Когда не подходит

Для размера HTTP-тела, бинарного протокола и ограничения столбца в байтах нужен strlen(), а не подсчёт символов.

Связанные материалы

Источники и проверка

  • PHP Documentation Group — структурный источник, без внешней ссылки
  • PHP Documentation Group — структурный источник, без внешней ссылки

Последняя содержательная проверка: . Автор-разработчик Михаил Каржин. Методика качества контента.

Данные этого сервиса

Настройки cookie и локальных данных

Аналитика

Текущий статус: не выбран. До согласия обе аналитические системы не загружаются.

Локальные данные

Удаление затрагивает только ключи PHP-сервиса в этом браузере и требует подтверждения.

Политики

Политика конфиденциальности · Политика использования файлов cookie