本文主要是介绍CSV导出时,含有逗号/减号等特殊字符造成的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
背景
今天运营的同事来找我们核对数据,发现我们后台导出的用户列表不如上游数据方全,但是我们确实是每天同步另加实时同步来确保双方数据一致,这让我很困惑呀,,经过一番定向查找,发现少的这一批医生,我们数据库中也是有的,只是导出的csv中发现,唯一标识竟然混乱了,如下图所示:
原来如此,是因为这个字段中有符号减号(-)造成的
定位原因并解决
CSV : Comma Separate Values
逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)。
“CSV”并不是一种单一的、定义明确的格式(尽管RFC 4180有一个被通常使用的定义)。因此在实践中,术语“CSV”泛指具有以下特征的任何文件:
- 纯文本,使用某个字符集,比如ASCII、Unicode、EBCDIC或GB2312;
由记录组成(典型的是每行一条记录); - 每条记录被分隔符分隔为字段(典型分隔符有逗号、分号或制表符;有时分隔符可以包括可选的空格);
- 每条记录都有同样的字段序列。
而造成乱码的情况就是因为我的值中包含分隔符减号
解决方案:
你可以使用xlsx导出数据,应该不会有这种问题
-
字段中包含有逗号,该字段必须用双引号括起来
-
字段中包含有换行符,该字段必须用双引号括起来
-
字段前后包含有空格,该字段必须用双引号括起来
-
字段中的双引号用两个双引号表示
-
字段中如果有双引号,该字段必须用双引号括起来
第一条记录,可以是字段名
而我这种,数值中包含减号的,只要强制转为字符串就好,具体可以是:
foreach ($doctors as $k => $v) {$v->医生大脑ID = $v->医生大脑ID."\t";$v->医生u_id = $v->医生u_id."\n";//头部if ($i == 0 && $k == 0) {fputcsv($fp, array_keys((array)$v));}fputcsv($fp, (array)$v);}
使用
\t
或
\n
来强制转换为字符串即可,出来的数据就正常了哟
这篇关于CSV导出时,含有逗号/减号等特殊字符造成的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!