使用 PHP 在 CSV 文件中用双引号将每个字段括起来?

2024-02-10

我需要使用 PHP 将所有带有双引号的字符串和数字放入 CSV 文件中。

如何从 PHP 创建 CSV 文件,并将所有数据放在双引号内?

我正在使用此代码生成 CSV - 我正在使用 codeigniter 框架

$array = array(
    array(
     (string)'XXX XX XX',
     (string)'3',
     (string)'68878353',
     (string)'',
     (string)'[email protected] /cdn-cgi/l/email-protection',
    ),
);

$this->load->helper('csv');
array_to_csv($array, 'blueform.csv'); 

我得到的输出:

"XXX XX XX",3,68878353,,[email protected] /cdn-cgi/l/email-protection

预期输出:

"XXX XX XX","3","68878353","","[email protected] /cdn-cgi/l/email-protection"

array_to_csv的代码

if (!function_exists('array_to_csv')) {
    function array_to_csv($array, $download = "") {
        if ($download != "") {   
            header('Content-Type: application/csv');
            header('Content-Disposition: attachement; filename="' . $download . '"');
        }

        ob_start();
        $f = fopen('php://output', 'w') or show_error("Can't open php://output");
        $n = 0;
        foreach ($array as $line) {
            $n++;
            if (!fputcsv($f, $line)) {
                show_error("Can't write line $n: $line");
            }
        }
        fclose($f) or show_error("Can't close php://output");
        $str = ob_get_contents();
        ob_end_clean();

        if ($download == "") {
            return $str;
        } else {
            echo $str;
        }
    }
}

先感谢您


在 PHP 中构建 CSV 时,您应该使用fputcsv http://php.net/manual/en/function.fputcsv.phpPHP 5 中提供的函数

从文档来看,有以下参数:

int fputcsv ( resource $handle , array $fields [, string $delimiter = "," [, string $enclosure = '"' [, string $escape_char = "\" ]]] )

你有:

  • 您正在写入的文件资源
  • 要放入 CSV 的数据
  • 分隔符(通常是逗号)
  • 字符串外壳(这是您想要的报价位)
  • 转义字符串(因此,如果您的数据包含封闭字符,您可以对其进行转义以避免它看起来像新字段)

默认情况下是,对于分隔符,以及"对于外壳,您不需要添加更多。这将正确覆盖琴弦。数字是另一回事。有一个解决办法这个问题 https://stackoverflow.com/questions/2489553/forcing-fputcsv-to-use-enclosure-for-all-fields我在输入大部分内容后发现仍然存在数字问题:

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

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

fputcsv($handler, array_map(encodeFunc, $array), ',', chr(0));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 PHP 在 CSV 文件中用双引号将每个字段括起来? 的相关文章

随机推荐