强制 fputcsv 对 *所有* 字段使用存储模块
当我使用 fputcsv 将一行写出到打开的文件句柄时,PHP 会向它认为需要它的任何列添加一个封闭字符,但会留下其他列没有外壳。
例如,您可能最终会得到这样一行
11,"Bob ",Jenkins,"200 main st. USA ",etc
除了在每个字段的末尾附加一个虚假的空格之外,有没有办法强制 fputcsv 始终将列与外壳(默认为 “)字符括起来?
当我使用 fputcsv 将一行写出到打开的文件句柄时,PHP 会向它认为需要它的任何列添加一个封闭字符,但会留下其他列没有外壳。
例如,您可能最终会得到这样一行
11,"Bob ",Jenkins,"200 main st. USA ",etc
除了在每个字段的末尾附加一个虚假的空格之外,有没有办法强制 fputcsv 始终将列与外壳(默认为 “)字符括起来?
否,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(' ')
)
没有“始终封闭”选项。
对这个解决方案不满意,但这是我所做的和工作。这个想法是在fptcsv上设置一个空字符作为外壳字符,并在数组的每个元素上添加一些引号。
function encodeFunc($value) {
return "\"$value\"";
}
fputcsv($handler, array_map(encodeFunc, $array), ',', chr(0));