PHP 7.2.0 Release Candidate 4 Released

iconv_strlen

(PHP 5, PHP 7)

iconv_strlenВозвращает количество символов в строке

Описание

int iconv_strlen ( string $str [, string $charset = ini_get("iconv.internal_encoding") ] )

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

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

str

Строка.

charset

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

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

Возвращает количество символов в str как целое число.

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

add a note add a note

User Contributed Notes 1 note

up
9
hfuecks @ nospam org
11 years ago
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;

<?php
# UTF-8 string containing bad sequence: \xe9
$str = "Itrntin\xe9liztin";

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:

(PHP 5.0.5)

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);

<?php
if (preg_match('/^.{1}/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
To Top