strlen() 计算字符串字节数,含空格、控制符及多字节字符的字节长度;检测空内容需先清理再判断;中文等需用 mb_strlen() 获取字符数。

包含。PHP 7.4 中 strlen() 计算的是字符串的**字节数**,所有可见和不可见字符(包括空格、制表符 \t、换行符 \n、回车符 \r)都会被计入长度。
空格会被明确计为 1 字节
例如:
-
strlen("a b")→ 返回 3(a、空格、b 各占 1 字节) -
strlen(" ")→ 返回 2(两个连续空格) -
strlen("\t\n")→ 返回 2(制表符和换行符各 1 字节)
注意零宽字符等“隐形”内容
用户粘贴或前端未清理的字符串中,可能混入零宽空格(\xe2\x80\x8b)、软连字符等 Unicode 控制符。它们虽不可见,但在 UTF-8 下占多个字节,strlen() 也会统计在内。例如:
-
strlen("a\xe2\x80\x8bb")→ 返回 5(a + 零宽空格(3 字节)+ b)
这类字符用 trim() 清不掉,需用正则预处理:$clean = preg_replace('/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/u', '', $str);
判断“是否为空内容”不能只靠 strlen() === 0
因为 strlen(" ") === 3,但它视觉上是空白的。若需检测“有效内容”,应先清理再判断:
立即学习“PHP免费学习笔记(深入)”;
- 仅去首尾空白:
trim($str) === '' - 去所有空白(含中间、Unicode 空格):
preg_replace('/\s+/u', '', $str) === '' - 最严格:先清理控制符,再 trim:
trim(preg_replace('/[\x00-\x08\x0b\x0c\x0e-\x1f\x7f]/u', '', $str)) === ''
中文等多字节字符要小心
strlen() 对 UTF-8 中文返回的是字节数,不是字符数。例如 strlen("你好") 返回 6(每个汉字 3 字节)。如果业务要求按“用户看到的字符个数”限制(如昵称最多 10 个汉字),必须用:mb_strlen($str, 'UTF-8') —— 并确保 mbstring 扩展已启用。



















