PHP Conference Japan 2024

iconv_strlen

(PHP 5、PHP 7、PHP 8)

iconv_strlen返回字符串的字符数

描述

iconv_strlen(字符串 $string, ?字符串 $encoding = null): 整数|false

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

参数

string

字符串。

encoding

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

返回值

返回 string 的字符数(整数),如果在编码过程中发生错误,则返回 false

变更日志

版本 描述
8.0.0 encoding 现在可以为 null。

参见

添加注释

用户贡献的注释 2 条注释

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
sheryl
4 年前
请注意存在脱节
>如果省略了 `charset` 参数,则假定 str 使用 iconv.internal_encoding 编码。

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