如果傳遞給 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("字串包含無效的 UTF-8");
}
?>
可以在以下網址找到較慢但更嚴格的檢查(正規表示式):http://www.w3.org/International/questions/qa-forms-utf-8
類似地,這也適用於 iconv_substr、iconv_strpos 和 iconv_strrpos