如果传递给 iconv_strlen 的 UTF-8 字符串包含格式错误的序列,它将返回 FALSE。这与 mb_strlen 和 utf8_decode 的行为形成对比,后者会去除任何错误序列;
<?php
# 包含错误序列的 UTF-8 字符串:\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";
?>
显示;
mb_strlen: 20
strlen/utf8_decode: 20
iconv_strlen
(PHP 5.0.5)
因此,它比 mb_strlen “更严格”,这可能意味着您需要首先检查无效序列。一种快速检查方法是利用 PCRE 扩展的行为(请参阅有关模式修饰符的说明);
<?php
if (preg_match('/^.{1}/us',$str,$ar) != 1) {
die("string contains invalid UTF-8");
}
?>
可以在以下位置找到更慢但更严格的检查(正则表达式):http://www.w3.org/International/questions/qa-forms-utf-8
类似情况适用于 iconv_substr、iconv_strpos 和 iconv_strrpos