strlen()返回字节数,适用于HTTP头、数据库字段等场景;含中文、emoji时需用mb_strlen($s, 'UTF-8')获取字符数,且必须显式指定编码。

直接用 strlen() 就行,但必须清楚它返回的是字节数,不是字符数。
PHP 8.0 中字符串仍是字节序列,strlen() 是最常用、最快、最可靠的长度获取方式——前提是你要测的是协议层或存储层关心的“真实字节长度”。
比如 HTTP 请求头、数据库字段限制、文件名长度上限,这些场景看的都是字节数,strlen($s) 完全够用。
但遇到中文、日文、emoji 等 UTF-8 多字节字符时:
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
立即学习“PHP免费学习笔记(深入)”;
-
"你好"的strlen()返回 6(每个汉字占 3 字节) - 如果你需要的是“2个字符”这个语义,就得换
mb_strlen($s, 'UTF-8')
注意两点:
-
mb_strlen()需要启用mbstring扩展,否则会报错 - 不传编码参数时,它依赖
mb_internal_encoding()当前设置,线上环境容易不一致,务必显式写'UTF-8'
简单对照:
- 测 URL 是否超 2048 字节?→ 用
strlen($url) - 显示用户昵称最多显示 10 个汉字?→ 用
mb_strlen($name, 'UTF-8') - 判断字符串是否为空?优先用
trim($s) === '',而不是只看strlen($s) === 0(避免空格干扰)
不复杂但容易忽略。


















