正确处理 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/
正确处理 CSV 文件的引号和逗号的更多相关文章
- php 写入csv时 双引号,逗号及特殊字符
1.双引号 <?php function new_csv($string) { $filename = date('Ymd').'.csv'; //设置文件名 header("Cont ...
- JS在生成csv文件时,","逗号问题处理.
在生成csv文件时,发现一个问题,因为csv文件本身是依靠逗号进行分列的,所以内容中有逗号时也被强制分列了,处理方法很简单,为内容加上双引号(英文格式)就可以了. 如: "11111,222 ...
- 导出csv文件示例
导出csv文件示例 csv文件默认以英文逗号,做为列分隔符换行符\n作为行分隔符,写入到一个.csv文件即可.含有英文逗号,和换行符会发生数据输出会出现混乱,下面列出一些处理方法.特殊字符处理1.含有 ...
- [原创]导出CSV文件,特殊字符处理。
CSV文件格式 1.CSV文件默认以英文逗号(,)做为列分隔符,换行符(\n)作为行分隔符.2.CSV默认认为由""括起来的内容是一个栏位,这时不管栏位内容里有除"之外字 ...
- 导出csv文件时,处理分隔符问题(转)
转自:http://blog.sina.com.cn/s/blog_468530a60100kjpy.html CSV文件默认以英文逗号做为列分隔符,换行符作为行分隔符. 如果不提供网页形式只用命令行 ...
- .csv文件内容分隔符
CSV文件默认以英文逗号做为列分隔符,换行符作为行分隔符. 如果不提供网页形式只用命令行或二进制程序输出数据到CSV,只需要将数据段按,分割,行按\n分割,写入到一个.csv文件即可. 但有时字段 ...
- Excel、CSV文件处理
1.Excel中以\t做为列分隔符,换行符作为行分隔符 使用c#导出excel的时候,当数字太长时,如身份证号,导出后的excel就会显示为科学计数法.如“511122154712121000”会显示 ...
- C语言读取写入CSV文件 [一]基础篇
本系列文章目录 [一] 基础篇 [二] 进阶篇--写入CSV [三] 进阶篇--读取CSV 什么是CSV? CSV 是一种以纯文本形式存储的表格数据,具体介绍如下(来自维基百科): 逗号分隔值(Com ...
- C#获取CSV文件内容对逗号和引号分隔的处理
我们知道,使用excel工具保存成csv文件时有几个规则: 1.每一行的单元格内容之间用逗号分隔. 2.如果单元格的内容本身有逗号,这个单元格的内容将会用引号包含. 3.如果单元格的内容本身有引号 1 ...
- 如何转义CSV文件中的逗号
CSV全称是:Comma Separated Values 或者 Character Separated Values. 尽管第一种说法更常见,但我觉得还是第二种说法更确切一些,因为你可以使用其它字符 ...
随机推荐
- 【Visual Leak Detector】源码编译 VLD 库
说明 使用 VLD 内存泄漏检测工具辅助开发时整理的学习笔记.本篇介绍 VLD 源码的编译.同系列文章目录可见 <内存泄漏检测工具>目录 目录 说明 1. VLD 库的依赖文件 2. 源码 ...
- B/S结构系统的会话机制(session)
B/S结构系统的会话机制(session) 目录 B/S结构系统的会话机制(session) 每博一文案 1. session 会话机制的概述 2. 什么是 session 的会话 3. sessio ...
- 【经验分享】使用Windows自带Xbox显示游戏帧率
环境: 工具:Xbox Game Bar 系统版本:Windows 10 快捷键:win + G 需求描述: 描述:需要实时显示当前游戏的帧率和硬件的占用率情况.如下图: 实现方法: 1.按下组合键w ...
- Flutter 如何将代码显示到界面上
前言 如何优雅的将项目中的代码,亦或是你的demo代码展示到界面上?本文对使用简单.便于维护且通用的解决方案,进行相关的对比和探究 为了节省大家的时间,把最终解决方案的相关接入和用法写在前面 预览代码 ...
- Prism Sample 13-IActiveAwareCommands
本例和12的唯一区别,仅仅是在ViewModel中增加了一个IActiveAware,这决定了只有在Acitve状态的视图中才会执行自己ViewModel中的命令.
- 【Redis】Redis 编译安装配置优化,多实例配置
一.Redis 配置详解 # Redis configuration file example. # # Note that in order to read the configuration fi ...
- Python-3.10安装步骤
下载地址: https://www.python.org/ftp/python/3.10.4/python-3.10.4-amd64.exe 安装: C:\Users\liujun>pyth ...
- LVDS_33 support
在HR bank/HD bank中,支持LVDS的bank使用VCCO 3.3v供电,仅仅需要对端给过来的信号,满足标准的LVDS差模电压/共模电压的标准即可.如下截图: 限制: 仅能作为input ...
- [SWPUCTF 2021 新生赛]PseudoProtocols
[SWPUCTF 2021 新生赛]PseudoProtocols 一.题目 二.WP 1.打开题目,发现提示我们是否能找到hint.php,并且发现URL有参数wllm.所以我们尝试利用PHP伪协议 ...
- 微软Build 2023两大主题:Copilots和插件
在本周大型微软人工智能 2023 开发者大会的开幕式上,人工智能站到了舞台中央--前台和后台以及介于两者之间的所有舞台. 贯穿会议的两个主要主题是Copilots - 涵盖广泛产品和服务的AI助手 - ...