iconv_strlen() 必须显式传入编码参数(如'utf-8'),否则因php 7.1+废弃iconv.internal_encoding而行为不可靠;它按字符而非字节计数,适合中文等多字节场景,结果比strlen()准确。

可以,但要注意编码参数必须明确指定,否则可能出错或返回意外结果。
iconv_strlen 要显式传入字符编码
PHP 7.1 中 iconv_strlen() 不会自动检测字符串编码,必须手动传入第二个参数(如 "UTF-8"),否则默认使用 iconv.internal_encoding 配置值——而该配置在 PHP 7.1+ 已被废弃,未设置时行为不可靠,容易返回 false 或错误长度。
- ✅ 正确写法:
iconv_strlen($str, 'UTF-8') - ❌ 危险写法:
iconv_strlen($str)(依赖已废弃的 internal_encoding)
比 strlen() 更适合多字节字符串
strlen() 只计算字节数,对 UTF-8 中的中文、emoji 等会严重高估(例如一个中文占 3 字节,strlen() 就算作 3 个“字符”);iconv_strlen() 按字符计数,结果符合直觉。
- 示例:
$s = "好";→strlen($s)返回3,iconv_strlen($s, 'UTF-8')返回1 - 适用于用户名、昵称、评论等含中文/多语言的场景
注意扩展依赖和替代方案
iconv_strlen() 需要 iconv 扩展启用(大多数环境默认开启)。若不确定环境,可先用 function_exists('iconv_strlen') 检查。
- 更现代的替代是
mb_strlen($str, 'UTF-8')(需 mbstring 扩展),语义更清晰,兼容性同样良好 - 两者在 UTF-8 下结果一致,选哪个主要看项目已有扩展依赖
不复杂但容易忽略编码参数,只要写全第二个参数,iconv_strlen 在 PHP 7.1 完全可用且推荐。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











