正确处理 CSV 文件的引号和逗号
导读:CSV(Comma-Separated Values,逗号分割值),就是用纯文本的形式存储表格数据,最大的特点就是方便。作为开发,我们经常面临导数据的问题,特别是后台系统,产品或者运营的同事常常会提需求。Emmm,实话说,直接用 PHPEx...
CSV(Comma-Separated Values,逗号分割值),就是用纯文本的形式存储表格数据,最大的特点就是方便。
作为开发,我们经常面临导数据的问题,特别是后台系统,产品或者运营的同事常常会提需求。
Emmm,实话说,直接用 PHPExcel 也是 OK 的,不管是 WPS Office 或者微软 Office,都能完美支持。
但我还是比较喜欢 CSV,原因是容易实现。有时候跑脚本、写爬虫抓数据,纯文本拼接后输出真的非常舒服。
当我遇到了几个问题:
- 发现如果原来的文本带有回车或者换行,拼接后整行就断开了;
- 加引号可以解决,但是引号中间有引号怎么办?用
\
转义也不行; - 逗号怎么办?
于是翻了谷歌,看到维基百科有 逗号分隔值 的标准化定义:
- 以(CR/LF)字符结束的DOS风格的行(最后一行可选)。
- 一条可选的表头记录(没有可靠的方式来检测它是否存在,所以导入时必须谨慎)。
- 每条记录“应当”包含同样数量的逗号分隔字段。
- 任何字段都可以被包裹(用双引号)。
- 包含换行符、双引号和/或逗号的字段应当被包裹。(否则,文件很可能不能被正确处理)。
- 字段中的一个(双)引号字符必须被表示为两个(双)引号字符。
好像也不难 :)
关键就是最后那两点——不多说,直接看代码:
function csv_string($s)
{
return '"'. str_replace('"', '""', trim($s)) .'"';
}
$value1 = csv_string($value1);
$value2 = csv_string($value2);
$value3 = csv_string($value3);
$line = "{
$value1}
,{
$value2}
,{
$value3}
\r\n";
简单粗暴。
文章来源于本人博客,发布于 2018-06-02,原文链接:https://imlht.com/archives/167/
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: 正确处理 CSV 文件的引号和逗号
本文地址: https://pptw.com/jishu/500898.html