强制 fputcsv 对 *所有* 字段使用存储模块

2022-08-30 11:31:05

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

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

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

除了在每个字段的末尾附加一个虚假的空格之外,有没有办法强制 fputcsv 始终将列与外壳(默认为 “)字符括起来?


答案 1

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

没有“始终封闭”选项。


答案 2

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

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

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

推荐