关于csv:正确处理-CSV-文件的引号和逗号

110次阅读

共计 768 个字符,预计需要花费 2 分钟才能阅读完成。

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/145/

正文完
 0