Длина строки в PHP: от символов до байтов

Раздел: Вычисления в PHP -> Подсчет количества

Подсчет символов в строке PHP: методы и примеры

Основной метод: функция strlen()

Функция strlen() возвращает количество байт в строке. Для однобайтовых кодировок (ASCII, Latin-1) это число равно количеству символов. Пример:


$str = "Hello";
echo strlen($str); // 5
  

Php количество записей (подсчет количества записей в php)

Однако для многобайтовых кодировок, таких как UTF-8, результат может не совпадать с ожидаемым количеством символов. Например, строка "Привет" из 6 кириллических символов занимает 12 байт, поэтому strlen("Привет") вернет 12.

Вопрос: когда уместно использовать strlen?

Функция полезна для подсчета размера данных в байтах, например, при проверке длины HTTP-заголовка или размера буфера. Для получения числа символов в многобайтовых строках применяют другие методы.

Типичная ошибка:

Использование strlen() для строк в кодировке UTF-8, содержащих кириллицу, приводит к завышенному результату. Решение: перейти на mb_strlen() или iconv_strlen().

Как посчитать точное количество символов в строке UTF-8?

Для этого предназначена функция mb_strlen() из расширения mbstring. Она учитывает многобайтовые кодировки и возвращает число символов, а не байт.


$str = "Привет, мир!";
echo mb_strlen($str, 'UTF-8'); // 12
  

количество символов в строке php (подсчет количества символов в строке php)

Параметр кодировки необязателен, но рекомендуется указывать явно. Если кодировка не задана, используется внутренняя кодировка, установленная в php.ini.

Возможная проблема:

Расширение mbstring может быть не включено в настройках PHP. В таком случае mb_strlen() вызовет ошибку. Перед использованием рекомендуется проверить наличие функции: if (function_exists('mb_strlen')) { ... }.

Как обойтись без mbstring для подсчета символов?

Альтернативой является функция iconv_strlen() из расширения iconv. Она также корректно считает символы в многобайтовых кодировках.


$str = "Привет, мир!";
echo iconv_strlen($str, 'UTF-8'); // 12
  

Php количество дней (подсчет количества дней в php)

Расширение iconv обычно включено, но не всегда доступно в некоторых окружениях.

Примечание:

Если ни mbstring, ни iconv не доступны, можно написать собственную функцию, использующую preg_match_all() с модификатором 'u' для работы с UTF-8:


function utf8_strlen($str) {
    preg_match_all('/./us', $str, $matches);
    return count($matches[0]);
}
echo utf8_strlen("Привет"); // 6
    

Php количество элементов (подсчет количества элементов в php)

Как подсчитать количество вхождений каждого символа в строке?

Функция count_chars() позволяет проанализировать частоту символов. Она принимает строку и режим: 0 - возвращает массив со счетчиками для всех 256 байтовых значений (только для однобайтовых строк), 1 - только символы, которые встречаются, 2 - только символы, которые не встречаются, 3 - строка из всех уникальных символов, 4 - строка из неповторяющихся символов.


$str = "Hello World";
$freq = count_chars($str, 1);
foreach ($freq as $ascii => $count) {
    echo chr($ascii) . ": $count\n";
}
  

количество массива php (подсчет количества элементов массива в php)

Этот метод работает только с однобайтовыми строками (ASCII). Для многобайтовых кодировок потребуется предварительная конвертация или использование mb_split с последующим подсчетом.

Как подсчитать только буквенные символы в строке?

Если требуется посчитать количество букв (без цифр, пробелов, знаков препинания), используют регулярные выражения с категорией Unicode \p{L}.


$str = "Привет, 123 мир!";
preg_match_all('/\p{L}/u', $str, $matches);
echo count($matches[0]); // 9 (буквы "П","р","и","в","е","т","м","и","р")
  

Модификатор 'u' включает режим Unicode. Этот подход подходит для любых алфавитов.

Производительность:

Регулярные выражения медленнее встроенных функций, поэтому при обработке больших объемов данных лучше использовать mb_strlen после удаления ненужных символов с помощью preg_replace.

Расширенные примеры подсчета символов

Пример 1: strlen для ASCII и UTF-8

Пример

$strAscii = "Hello";
$strUtf8 = "Привет";
echo "ASCII: " . strlen($strAscii) . " байт\n";
echo "UTF-8: " . strlen($strUtf8) . " байт\n";
  
ASCII: 5 байт
UTF-8: 12 байт
  

Результат показывает, что для ASCII длина в байтах совпадает с числом символов, а для UTF-8 - нет.

Пример 2: mb_strlen с явным указанием кодировки

Пример

$str = "Привет, мир! ?";
echo mb_strlen($str, 'UTF-8'); // 13 (включая эмодзи)
  
13
  

Функция корректно считает эмодзи (суррогатные пары) как один символ.

Пример 3: iconv_strlen

Пример

$str = "Привет";
echo iconv_strlen($str, 'UTF-8'); // 6
  
6
  

Пример 4: count_chars в режиме 3 (уникальные символы)

Пример

$str = "abracadabra";
$unique = count_chars($str, 3);
echo $unique; // "abcdr"
  
abcdr
  

Пример 5: подсчет букв с помощью регулярного выражения

Пример

$str = "123 abc! DEF.";
preg_match_all('/[a-zA-Z]/', $str, $matches);
echo count($matches[0]); // 6 (только латиница)
  
6
  

Пример 6: самодельная функция для UTF-8 без mbstring

Пример

function utf8_strlen($str) {
    preg_match_all('/./us', $str, $matches);
    return count($matches[0]);
}
echo utf8_strlen("Привет"); // 6
  
6
  

Подсчет количества символов в строке PHP - comments

En
количество символов в строке php (php)