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