接口返回一串用逗号拼起来的标签,直接 explode 之后中文全乱。问题不在 explode,在分隔符和编码没对上。

最常用的三个函数

explode 按固定分隔符切,str_split 按长度切,preg_split 按正则切。日常九成场景用 explode 就够。

$str = '苹果,香蕉,橙子'; $arr = explode(',', $str); print_r($arr);

切完是三个元素的索引数组。分隔符在开头或结尾时会多出空串,用 array_filter 过一遍再往下用,不然循环里会多跑一轮空值。

中文按字数切要小心

str_split 是按字节切的,一个汉字在 UTF-8 里占三个字节,切出来就是乱码。要按字符切,用 mb_str_split,第二个参数写 1,前提是装了 mbstring 扩展。

$chars = mb_str_split('你好世界', 1);

老项目里常见 mb_substr 配循环的写法,效果一样,就是慢一点。还有一种写法是把长度参数写成 3,中文字刚好凑一组,看着能出字,碰上标点和英文立刻又乱,别这么凑。

几种特殊来源的字符串

表单里多选框的字段名以方括号结尾,PHP 收到时直接就是数组,不用再转。从 JSON 来的字符串,先用 json_decode,第二个参数传 true,拿到的就是关联数组,比切字符串稳得多。

逗号分隔的文件行用 str_getcsv,能顺带处理引号包裹的字段。分隔符是空格的别用 explode,连续空格会切出一堆空元素,改用 preg_split 加一个加号的正则,把连续空白当一处。

反过来拼回字符串用 implode,分隔符和切的时候保持一致。切用半角逗号、拼用全角逗号,拼出来的东西就跟原串对不上,排查时很费眼。

动手前先 var_dump 一下原始字符串。看不见的换行、首尾空格、全角逗号,才是最坑的地方,很多时候不是函数的问题。