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/

正确处理 CSV 文件的引号和逗号的更多相关文章

  1. php 写入csv时 双引号,逗号及特殊字符

    1.双引号 <?php function new_csv($string) { $filename = date('Ymd').'.csv'; //设置文件名 header("Cont ...

  2. JS在生成csv文件时,","逗号问题处理.

    在生成csv文件时,发现一个问题,因为csv文件本身是依靠逗号进行分列的,所以内容中有逗号时也被强制分列了,处理方法很简单,为内容加上双引号(英文格式)就可以了. 如: "11111,222 ...

  3. 导出csv文件示例

    导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ...

  4. [原创]导出CSV文件,特殊字符处理。

    CSV文件格式 1.CSV文件默认以英文逗号(,)做为列分隔符,换行符(\n)作为行分隔符.2.CSV默认认为由""括起来的内容是一个栏位,这时不管栏位内容里有除"之外字 ...

  5. 导出csv文件时,处理分隔符问题(转)

    转自:http://blog.sina.com.cn/s/blog_468530a60100kjpy.html CSV文件默认以英文逗号做为列分隔符,换行符作为行分隔符. 如果不提供网页形式只用命令行 ...

  6. .csv文件内容分隔符

    CSV文件默认以英文逗号做为列分隔符,换行符作为行分隔符.  如果不提供网页形式只用命令行或二进制程序输出数据到CSV,只需要将数据段按,分割,行按\n分割,写入到一个.csv文件即可.  但有时字段 ...

  7. Excel、CSV文件处理

    1.Excel中以\t做为列分隔符,换行符作为行分隔符 使用c#导出excel的时候,当数字太长时,如身份证号,导出后的excel就会显示为科学计数法.如“511122154712121000”会显示 ...

  8. C语言读取写入CSV文件 [一]基础篇

    本系列文章目录 [一] 基础篇 [二] 进阶篇--写入CSV [三] 进阶篇--读取CSV 什么是CSV? CSV 是一种以纯文本形式存储的表格数据,具体介绍如下(来自维基百科): 逗号分隔值(Com ...

  9. C#获取CSV文件内容对逗号和引号分隔的处理

    我们知道,使用excel工具保存成csv文件时有几个规则: 1.每一行的单元格内容之间用逗号分隔. 2.如果单元格的内容本身有逗号,这个单元格的内容将会用引号包含. 3.如果单元格的内容本身有引号 1 ...

  10. 如何转义CSV文件中的逗号

    CSV全称是:Comma Separated Values 或者 Character Separated Values. 尽管第一种说法更常见,但我觉得还是第二种说法更确切一些,因为你可以使用其它字符 ...

随机推荐

  1. 【Visual Leak Detector】源码编译 VLD 库

    说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇介绍 VLD 源码的编译.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. VLD 库的依赖文件 2. 源码 ...

  2. B/S结构系统的会话机制(session)

    B/S结构系统的会话机制(session) 目录 B/S结构系统的会话机制(session) 每博一文案 1. session 会话机制的概述 2. 什么是 session 的会话 3. sessio ...

  3. 【经验分享】使用Windows自带Xbox显示游戏帧率

    环境: 工具:Xbox Game Bar 系统版本:Windows 10 快捷键:win + G 需求描述: 描述:需要实时显示当前游戏的帧率和硬件的占用率情况.如下图: 实现方法: 1.按下组合键w ...

  4. Flutter 如何将代码显示到界面上

    前言 如何优雅的将项目中的代码,亦或是你的demo代码展示到界面上?本文对使用简单.便于维护且通用的解决方案,进行相关的对比和探究 为了节省大家的时间,把最终解决方案的相关接入和用法写在前面 预览代码 ...

  5. Prism Sample 13-IActiveAwareCommands

    本例和12的唯一区别,仅仅是在ViewModel中增加了一个IActiveAware,这决定了只有在Acitve状态的视图中才会执行自己ViewModel中的命令.

  6. 【Redis】Redis 编译安装配置优化,多实例配置

    一.Redis 配置详解 # Redis configuration file example. # # Note that in order to read the configuration fi ...

  7. Python-3.10安装步骤

    下载地址: https://www.python.org/ftp/python/3.10.4/python-3.10.4-amd64.exe 安装:   C:\Users\liujun>pyth ...

  8. LVDS_33 support

    在HR bank/HD bank中,支持LVDS的bank使用VCCO 3.3v供电,仅仅需要对端给过来的信号,满足标准的LVDS差模电压/共模电压的标准即可.如下截图:  限制: 仅能作为input ...

  9. [SWPUCTF 2021 新生赛]PseudoProtocols

    [SWPUCTF 2021 新生赛]PseudoProtocols 一.题目 二.WP 1.打开题目,发现提示我们是否能找到hint.php,并且发现URL有参数wllm.所以我们尝试利用PHP伪协议 ...

  10. 微软Build 2023两大主题:Copilots和插件

    在本周大型微软人工智能 2023 开发者大会的开幕式上,人工智能站到了舞台中央--前台和后台以及介于两者之间的所有舞台. 贯穿会议的两个主要主题是Copilots - 涵盖广泛产品和服务的AI助手 - ...