php 导出csv 转义 逗号转义,PHP怎么在导出csv的时候加双引号

我始终觉得 fputcsv() 挺土的 ... 不如自己实现一个 ... 也不是很麻烦 ...

当然如果你一定要用 ... 我们就要先研究一下为什么会出现多重双引号这个问题 .../* enclose a field that contains a delimiter, an enclosure character, or a newline */

if (FPUTCSV_FLD_CHK(delimiter) ||

FPUTCSV_FLD_CHK(enclosure) ||

FPUTCSV_FLD_CHK(escape_char) ||

FPUTCSV_FLD_CHK('\n') ||

FPUTCSV_FLD_CHK('\r') ||

FPUTCSV_FLD_CHK('\t') ||

FPUTCSV_FLD_CHK(' ')

) {

/ext/standard/file.c 的第 1867 - 1875 行 ...

这里描述了 enclosure ... 我翻译成 包围符 出现的规则 ...

双引号本身正是默认的包围符 ... 触发了规则 ... 导致双引号外面再加双引号造成两个双引号的结果 ...

知道了原理 ... 我们来研究对策 ...

第一种方法 ... 使用默认的双引号做包围符 ... 但是强制所有元素触发 ...foreach ($lines as &$line) {

foreach ($line as &$column) {

$column = $column . ' ';

}

}

产生的结果大概会类似于下面这样 ..."CA ","12 ","Y "

"MU ","13 ","Y "

"MU ","12 ","N "

第二种方法 ... 我们去研究手册 ... 手册上关于这个函数的说明是这样的 ...int fputcsv ( resource $handle , array $fields [, string $delimiter = ',' [, string $enclosure = '"' ]] )

你可以看到这个函数支持自定义包围符 ... 也就是第四个参数 $enclosure ...

于是我们可以手动在所有元素的两侧加上双引号 ... 并修改默认的包围符为空 ...foreach ( $old['lines'] as $line ) {

fputcsv( $new, $line, ',', ' ' );

}

这种方式可以让你的例子返回完美的结果 ...

但是如果元素触发了包围符出现规则的话 ... 就会在分隔符也就是逗号的两端出现空格 ...

你可能会好奇为什么一定要是空格 ... 因为包围符必须是一个字符 ... 不能是空也不能是 null ...

如果你确定你的元素里一定不包含会触发包围符出现的所有字符以及另外的某个字符 ...

也可以修改成另外的那个字符 ... 反正想办法永远不要触发添加包围符的规则就对了 ...

两种方法 ... 都不是很完美 ... 选择哪种就看你的需要了 ...

当然最后的最后我还是要说 ... 这个函数实在是太土了还是自己实现一个吧 ...

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值