explode 不允许空字符串作分隔符,应改用 str_split;处理空元素需配合 trim 和 array_filter;UTF-8 下安全但须确保编码一致;性能上比 preg_split 快 2–5 倍,但复杂场景需专用解析器。

explode 函数分不开字符串?先看分隔符是不是空字符串
直接报 Warning: explode(): Empty delimiter 就是这个原因。PHP 的 explode 不允许用空字符串 '' 当分隔符,哪怕你本意是想把字符串拆成单字符数组——它不干。
常见错误场景:用户从表单或配置读进来的分隔符变量没校验,比如 $sep = $_GET['sep'] ?? '',一传空就崩。
- 想按字符拆,改用
str_split($str) - 不确定分隔符是否为空,加一层判断:
if ($sep === '') { return str_split($str); } - 前端传参时,用
null或特定字符串(如'none')代替空值,后端再映射
分割结果里有空元素?trim 和 array_filter 得配合着用
explode 对首尾、连续分隔符完全不处理,explode(',', ',a,,b,') 会得到 ['', 'a', '', 'b', ''] —— 这不是 bug,是设计如此。
真实场景里,CSV 解析、日志字段提取、URL 查询参数拼接都容易撞上这种脏数据。
立即学习“PHP免费学习笔记(深入)”;
- 只去首尾空格:对每个元素用
array_map('trim', $parts) - 连空元素一起删:用
array_filter($parts, 'strlen')(注意别用array_filter($parts),0 和 '0' 也会被误删) - 如果要保留中间的空值但去掉首尾,先
trim($str, $sep)再explode
中文或 UTF-8 字符串用 explode 安全吗?
安全,但有前提:分隔符本身必须是完整、合法的 UTF-8 字节序列。只要你的分隔符不是截断的多字节字符(比如只取了某个汉字的前两个字节),explode 就只是做字节匹配,不会乱码也不会崩溃。
问题常出在:从数据库或 API 拿到的字符串编码不一致,或者分隔符是从用户输入里硬截出来的。
- 确认源字符串和分隔符都是 UTF-8:
mb_check_encoding($str, 'UTF-8') && mb_check_encoding($sep, 'UTF-8') - 避免用
substr截分隔符,改用mb_substr(如果真需要) - 更稳妥的做法:统一在入口层转好编码,而不是在每次
explode前检查
性能敏感场景下,explode 比 preg_split 快多少?
简单分隔符(如逗号、竖线)下,explode 通常比 preg_split 快 2–5 倍,因为它不走正则引擎,纯 C 实现的内存扫描。
但一旦分隔符动态变化、带转义逻辑、或要跳过引号内分隔符(比如 CSV 中的逗号),explode 就无能为力了——这时候硬撑反而导致后续大量修补代码。
- 固定分隔符、已知格式:无条件选
explode - 分隔符含正则元字符(如
.、*)、或需忽略某些上下文:直接上str_getcsv或专用解析器 - 别为了“省一次函数调用”在循环里反复
explode同一个长字符串,提前拆好复用
最常被忽略的是分隔符来源不可信——它可能来自用户输入、配置文件、甚至另一个系统的响应体。只要没做非空+合法性校验,explode 就随时可能抛警告或返回意外结果。



















