You can use grapheme_strlen() to count emojis as a single character:
<?php
echo strlen('🏴'); //28 - oh no
echo mb_strlen('🏴'); // - closer, but no
echo grapheme_strlen('🏴'); //1 - Bingo
?>(PHP 5 >= 5.3.0, PHP 7, PHP 8, PECL intl >= 1.0.0)
grapheme_strlen — Получает количество графемных кластеров в строке
Процедурный стиль
Функция возвращает количество графемных кластеров в строке, а не длину в байтах или символах.
stringСтрока по стандарту UTF-8, в которой требуется посчитать количество графемных кластеров.
Функция возвращает количество графемных кластеров в строке, если выполнилась успешно, или false, если возникла ошибка.
Пример #1 Пример подсчёта графемных кластеров в строке функцией grapheme_strlen()
<?php
// Символ | Название | Кодовая точка | Форма нормализации
// å: 'LATIN SMALL LETTER A WITH RING ABOVE', U+00E5, D
$char_a_ring_nfd = "a\xCC\x8A";
// ö: 'LATIN SMALL LETTER O WITH DIAERESIS', U+00F6, D
$char_o_diaeresis_nfd = "o\xCC\x88";
print grapheme_strlen('abc' . $char_a_ring_nfd . $char_o_diaeresis_nfd . $char_a_ring_nfd);Результат выполнения приведённого примера:
6
You can use grapheme_strlen() to count emojis as a single character:
<?php
echo strlen('🏴'); //28 - oh no
echo mb_strlen('🏴'); // - closer, but no
echo grapheme_strlen('🏴'); //1 - Bingo
?>