后台导出的报表在自己电脑上用文本编辑器正常,发给同事用 Excel 打开中文全是乱码。日志里能对上时间点,这种反而好排。
Excel 默认按本地编码打开无 BOM 的 CSV,UTF-8 中文因此显示异常。这一点先确认清楚,后面就不用反复试。
header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=report.csv');
echo chr(0xEF) . chr(0xBB) . chr(0xBF);
$fp = fopen('php://output', 'w');
fputcsv($fp, ['订单号', '金额']);
围绕「CSV Excel 中文乱码」排查时,命令行跑一遍比在面板里点十次有用,面板会替你做掉不少隐式操作。能分两步做的操作就别合成一步,中间看一眼返回值,出问题好判断。
报错里带路径的,先去看那个路径在不在、权限对不对。同一份配置存在多处的,先确认改的是被加载的那一份。
新版本先放一台机器上跑一天再全量,问题一般在这段时间暴露。备份不是备了就行,恢复一次才算数,很多备份文件打开才发现是空的。
处理上按这个顺序:输出前先写 UTF-8 BOM;统一用 fputcsv 生成;告知使用方导入时选择编码。
结果对不对很好判断,下载的文件用 Excel 直接双击打开,中文列显示正常不串行。