当前位置:  开发笔记 > 编程语言 > 正文

强制fputcsv为*all*字段使用Enclosure

如何解决《强制fputcsv为*all*字段使用Enclosure》经验,为你挑选了3个好方法。

当我使用fputcsv写一行到打开的文件句柄时,PHP会将一个封闭的字符添加到它认为需要的任何列,但是会留下没有这些外壳的其他列.

例如,您最终可能会得到这样的一行

11,"Bob ",Jenkins,"200 main st. USA ",etc

如果没有将虚假空间附加到每个字段的末尾,是否有任何方法可以强制fputcsv始终用外壳包含列(默认为")"字符?



1> VolkerK..:

不,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(' ')
)

没有"永远封闭"选项.


VolkerK当然是对的.fputcsv无法帮助你解决这个问题(我有同样的问题).让我帮助您快速开始下一次搜索:[http://stackoverflow.com/questions/3933668/convert-array-into-csv](http://stackoverflow.com/questions/3933668 /转换阵列 - 进入 - CSV)
伤心,因为fgetcsv失败了Österreich没有双引号!

2> 小智..:

对这个解决方案不满意,但这是我所做的和工作的.我们的想法是在fputcsv上设置一个空字符作为外壳字符,并在数组的每个元素上添加一些引号.

function encodeFunc($value) {
    return "\"$value\"";
}

fputcsv($handler, array_map(encodeFunc, $array), ',', chr(0));


如果文件是UTF-8,则在文件中包含chr(0)会导致某些导入脚本出现问题

3> dearsina..:

建立在马丁的回答,如果你想避免将不从源阵列(干任何字符Chr(127),Chr(0)等等),你可以替换,而不是下面的fputcsv()行:

fputs($fp, implode(",", array_map("encodeFunc", $row))."\r\n");

当然,fputs()比fputcsv()慢,但它的输出更清晰.完整的代码是这样的:

/***
 * @param $value array
 * @return string array values enclosed in quotes every time.
 */
function encodeFunc($value) {
    ///remove any ESCAPED double quotes within string.
    $value = str_replace('\\"','"',$value);
    //then force escape these same double quotes And Any UNESCAPED Ones.
    $value = str_replace('"','\"',$value);
    //force wrap value in quotes and return
    return '"'.$value.'"';
}

$fp = fopen("filename.csv", 'w');
foreach($table as $row){
    fputs($fp, implode(",", array_map("encodeFunc", $row))."\r\n");
}
fclose($fp);


谢谢您的好榜样。我需要始终将所有值括在引号中。而且,我需要强制将行尾改为CR + LF,而不仅仅是LF。本示例解决了两个问题。
推荐阅读
mobiledu2402851203
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有