正确处理 CSV 文件的引号和逗号

简介: CSV(Comma-Separated Values,逗号分割值),就是用纯文本的形式存储表格数据,最大的特点就是方便。但是你真的会处理 CSV 文件吗?数据包含引号或逗号,该怎么办?

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/

目录
相关文章
|
存储 DataWorks Unix
Dataworks数据集成之“文本数据”
Dataworks不是支持文本数据导入么?为什么Excel数据不能导入?CSV文件不就是Excel文件么?关于这些问题,我整理了一篇文章进行解释。
1745 2
|
数据库 OceanBase
OceanBase数据库中,如果你想卸载`obd`
OceanBase数据库中,如果你想卸载`obd`
1330 2
|
6月前
|
Linux API iOS开发
阿里云+本地 OpenClaw 零基础部署保姆级步骤流程及大模型API配置与新手问题排查
OpenClaw(原Clawdbot/Moltbot)是一款开源的个人AI助手平台,具备自然语言交互、自动化任务执行、插件化扩展等核心能力,可广泛应用于个人办公提效、轻量化自动化操作等场景。对于零基础、零技术背景的用户而言,无需掌握复杂的编程知识或服务器运维技能,即可通过阿里云云端部署或本地电脑(MacOS/Linux/Windows11)部署的方式,快速启用OpenClaw,并对接阿里云千问大模型API或免费大模型Coding Plan API,实现各类自动化交互需求。
1663 0
|
7月前
|
人工智能 自然语言处理 安全
2026年OpenClaw(Clawdbot)阿里云官方部署教程+Slack快速接入指南
OpenClaw(原Clawdbot)作为企业级AI自动化代理工具,凭借跨平台协作、轻量化部署、插件化扩展的核心优势,成为全球化团队、远程办公场景下Slack协作提效的关键工具。2026年阿里云推出OpenClaw专属云端部署方案,结合Slack在海外企业协作场景的高渗透率,实现“Slack频道/私信下达指令,阿里云服务器运行的OpenClaw执行自动化任务”的高效模式。本文将完整拆解阿里云云端部署OpenClaw的全流程,重点详解Slack App创建、权限配置、跨境网络适配、机器人对接调试的核心步骤,包含实操代码命令与海外协作场景避坑技巧,零基础用户也能快速完成从部署到落地的全流程。
1159 1
|
10月前
|
搜索推荐 API Python
DeepSeek-V3.1 发布,迈向 Agent 时代的第一步
今日发布DeepSeek-V3.1,支持混合推理架构,提升思考效率与Agent能力。编程与搜索智能体表现显著增强,API已升级并支持Anthropic格式,模型开源,上下文扩展至128K。
1261 5
|
存储 运维 BI
万字长文带你深入广告场景Paimon+Flink全链路探索与实践
本文将结合实时、离线数据研发痛点和当下Paimon的特性,以实例呈现低门槛、低成本、分钟级延迟的流批一体化方案,点击文章阅读详细内容~
|
缓存 Java
java把InputStream流写入到文件中
java把InputStream流写入到文件中
728 0
|
图形学
【unity实战】实现一个buff系统(附项目源码)
【unity实战】实现一个buff系统(附项目源码)
2003 0