Подсчет русских букв php

iconv_strlen

В отличие от strlen() , iconv_strlen() учитывает кодировку строки. Длина string не обязательно будет соответствовать количеству байт в ней, так как в различных кодировках различные символы кодируются различным количеством байт, например, юникод может быть и двух-, и четырёхбайтным.

Список параметров

Если параметр encoding опущен, предполагается, что кодировка строки string эквивалентна значению iconv.internal_encoding.

Возвращаемые значения

Возвращает количество символов в string как целое число или false в случае возникновения ошибки при кодировании.

Список изменений

Смотрите также

  • grapheme_strlen() — Получает длину строки в единицах графемы
  • mb_strlen() — Получает длину строки
  • strlen() — Возвращает длину строки

User Contributed Notes 2 notes

If iconv_strlen is passed a UTF-8 string containing badly formed sequences, it will return FALSE. This is in contrast to mb_strlen of the behaviour of utf8_decode, which strip out any bad sequences;

# UTF-8 string containing bad sequence: \xe9
$str = «I?t?rn?ti?n\xe9?liz?ti?n» ;

print «mb_strlen: » . mb_strlen ( $str , ‘UTF-8’ ). «\n» ;
print «strlen/utf8_decode: » . strlen ( utf8_decode ( $str )). «\n» ;
print «iconv_strlen: » . iconv_strlen ( $str , ‘UTF-8’ ). «\n» ;
?>

Displays;

mb_strlen: 20
strlen/utf8_decode: 20
iconv_strlen:

As such it is being «stricter» than mb_strlen and it may mean you need to check for invalid sequences first. A quick way to check is to exploit the behaviour of the PCRE extension (see notes on pattern modifiers);

if ( preg_match ( ‘/^./us’ , $str , $ar ) != 1 ) die( «string contains invalid UTF-8» );
>
?>

A slower but stricter check (regex) can be found at: http://www.w3.org/International/questions/qa-forms-utf-8

Similiar applies to iconv_substr, iconv_strpos and iconv_strrpos

Notice there is a disconnect:
>If charset`parameter is omitted, str is assumed to be encoded in iconv.internal_encoding.

But clicking on the iconv.internal_encoding link (https://www.php.net/manual/en/iconv.configuration.php), the docs indicate that iconv.internal_encoding is deprecated since 5.6.

Оцените статью