iconv_strlen

(PHP 5、PHP 7、PHP 8)

iconv_strlen返回字符串的字符数

说明

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

strlen() 不同,iconv_strlen() 基于指定的字符集,统计给定字节序列 string 中字符的出现次数,其结果不一定与字符串的字节长度相同。

参数

string

字符串。

encoding

如果省略 encoding 参数或为 null,则假定 string 使用 iconv.internal_encoding 编码。

返回值

返回 string 的字符数,以整数形式表示,如果在编码过程中发生错误,则返回 false

变更日志

版本 说明
8.0.0 encoding 现在可以为空。

参见

添加注释

用户贡献的注释 2 个注释

12
hfuecks @ nospam org
18 年前
如果向 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
4
sheryl
4 年前
注意,存在断开连接
>如果省略 charset`参数,则假定 str 使用 iconv.internal_encoding 编码。

但是,单击 iconv.internal_encoding 链接 (https://php.net/manual/en/iconv.configuration.php),文档表明 iconv.internal_encoding 自 5.6 版本起已弃用。
To Top