最推荐方式是根据字符编码选择函数:纯ascii用strlen(),多字节字符(如中文、emoji)必须用mb_strlen($str, 'utf-8'),否则strlen()返回字节数而非字符数。

PHP 8.3 中判断字符串长度是否小于指定值,最直接、安全且推荐的方式是使用 strlen() 函数配合比较运算符,但需注意字符编码问题。如果字符串含多字节字符(如中文、emoji),strlen() 返回的是**字节数**而非“字符数”,此时应改用 mb_strlen() 并指定正确的字符编码(如 'UTF-8')。
用 strlen() 判断字节长度(适合 ASCII 或纯英文场景)
适用于只包含 ASCII 字符的字符串(如用户名、路径、标识符等),速度快,无需额外扩展:
if (strlen($str)- 注意:
strlen(null)会返回0,而strlen('')也是0;若变量可能为null,建议先用is_string()或空合并处理,避免意外行为
用 mb_strlen() 判断字符长度(推荐用于国际化或含中文/emoji)
当字符串可能含 UTF-8 中文、日文、emoji 或其他多字节字符时,必须用 mb_strlen(),否则长度判断会出错(例如一个中文字符占 3 字节,strlen() 会算成 3,但你实际想限制“最多5个汉字”):
if (mb_strlen($str, 'UTF-8')- 确保
mbstring扩展已启用(PHP 8.3 默认开启,但某些精简环境可能关闭) - 编码参数不能省略,显式写
'UTF-8'更可靠,避免依赖mb_internal_encoding()的当前设置
简洁写法:封装成可复用的函数
为提升可读性和复用性,可封装一个安全判断函数:
function strShorterThan(string $str, int $max, string $encoding = 'UTF-8'): bool
{
return mb_strlen($str, $encoding) <h3>避坑提醒:常见错误</h3><p>以下做法在 PHP 8.3 中不推荐或存在隐患:</p>
- 用
iconv_strlen()—— 功能类似但不如mb_strlen()普适,且部分系统 iconv 实现对 emoji 支持不稳定 - 直接比较
strlen($str) 而不校验类型 —— 若 <code>$str是数组或对象,会触发警告甚至错误 - 忽略编码参数写
mb_strlen($str)—— 依赖内部编码,易在不同环境表现不一致
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











