用 explode() 测字符串长度是错误的,因其返回的是分割后的段落数而非字符数;正确方法是:字节长度用 strlen(),多字节字符长度(如中文、emoji)必须用 mb_strlen($s, 'UTF-8')。
explode() 测字符串长度是错的想通过 explode() 分割再取数组长度来判断原字符串“有多长”,本质混淆了「字符数」和「段落数」。比如 explode(',', 'a,b,c') 得到 3 个元素,但原字符串长度是 5;中间有连续逗号('a,,b')时,结果更不可靠——默认会忽略空段,除非显式传第三个参数。
strlen() 和 mb_strlen() 才是正解测字节长度用 strlen(),测字符长度(尤其含中文、emoji)必须用 mb_strlen() 并指定编码,否则多字节字符会被算成多个字节。常见错误是直接对 UTF-8 字符串调 strlen(),返回值比实际“看起来的长度”大。
strlen('你好') → 返回 6(UTF-8 下每个汉字占 3 字节)mb_strlen('你好', 'UTF-8') → 返回 2
mb_strlen() 依赖 mb_internal_encoding() 当前值,线上环境可能不一致,务必显式传 'UTF-8'
explode() 后取 count() 的真实用途它只适合统计「以某分隔符切分出的非空逻辑单元数量」,比如 CSV 行字段数、路径层级、标签列表项数。但前提是:分隔符明确、数据格式可控。
count(explode(',', $s, -1))(PHP 7.4+ 支持负数限制,保留末尾空项)explode(),改用 preg_split()
explode() 比 mb_substr() 或正则快,但仅限于单字节分隔符且无需编码感知的场景空字符串、全分隔符字符串、超长字符串在不同 PHP 版本下行为略有差异,尤其涉及内存和 max_input_vars 限制时。
explode(',', '') 返回 [''],count() 是 1,不是 0
explode(',', ',,') 默认返回 ['', '', '']?错——实际是 ['', ''](末尾空串被丢弃),只有加 -1 才得 3 个memory_limit 时,explode() 可能静默失败或触发 Fatal error: Allowed memory size exhausted,而 strlen() 几乎无开销mb_strlen(),别绕路。分割后数数