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
iconv_strlen
(PHP 5)
iconv_strlen — Retourne le nombre de caractères d'une chaîne
Description
int iconv_strlen
( string $str
[, string $charset
] )
À l'opposée de strlen(), la valeur de retour de iconv_strlen() est le nombre de caractères faisant partie de la séquence d'octets str , ce qui n'est pas toujours la même chose que la taille en octets de la chaîne de caractères.
Liste de paramètres
- str
- charset
-
Si charset n'est pas passé en paramètre, str est supposée être encodée en iconv.internal_encoding.
Valeurs de retour
Retourne le nombre de caractères de la chaîne str , sous la forme d'un entier.
iconv_strlen
hfuecks @ nospam org
25-Feb-2006 01:58
25-Feb-2006 01:58
