PHP 8.4.22 Released!

iconv_strlen

(PHP 5, PHP 7, PHP 8)

iconv_strlenRetourne le nombre de caractères d'une chaîne

Description

function iconv_strlen(string $string, ?string $encoding = null): int|false

À l'opposé de strlen(), iconv_strlen() compte les occurrences des caractères présents dans la séquence d'octets string en se basant sur le jeu de caractères spécifié, ce qui n'est pas nécessairement identique à la longueur de la chaîne en octets.

Liste de paramètres

string

La chaîne de caractères.

encoding

Si encoding est omis ou null, string est supposée être encodée en iconv.internal_encoding.

Valeurs de retour

Retourne le nombre de caractères de la chaîne string, sous la forme d'un entier, ou false si une erreur se produit durant l'encodage.

Historique

Version Description
8.0.0 encoding est désormais nullable.

Voir aussi

add a note

User Contributed Notes 2 notes

up
13
hfuecks @ nospam org
20 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 = "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:

(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
up
2
sheryl
6 years ago
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.
To Top