导出三千条订阅记录,Excel 打开只有一列,邮箱和日期叠在同一格,用文本编辑器看逗号分隔是对的。碰到这种情况,我一般先确认改动有没有真的生效。
原因不复杂,导出时用逗号拼接字段,字段内容本身带逗号时没有加引号,Excel 按列分隔就错位。没有 BOM 时中文还会变成乱码。分隔符与系统区域设置不一致也会出现单列。
碰到「订阅列表导出」这类问题,我习惯先把当前配置原样备份一份,改坏了立刻换回来,不用现场推。日志级别临时调高可以,记得改回去,长期开着既占磁盘又掩盖真问题。
$fh = fopen('subscribers.csv', 'w');
fwrite($fh, "\xEF\xBB\xBF");
fputcsv($fh, array('邮箱', '状态', '订阅时间'));
权限不要一口气开到最大,先加到够用再往上试,范围小才好收。把复现步骤压到三条以内,交给同事也能跑出来,才算真的定位清楚。
具体做法是,改用 fputcsv 写文件,引号和转义交给函数处理;输出前写 UTF-8 BOM,Excel 才会按 UTF-8 解析;导出后先用文本编辑器确认行数,再用 Excel 打开核对列数。
最后用这个标准收尾,Excel 打开后三列分明,中文正常,行数与后台总数一致。
