逗号分隔文件,附加加密包机而不是新行

时间:2013-06-05 06:24:31

标签: php csv

我正在创建一个逗号分隔文件,在每行的末尾附加加密字符,而不是在新行中开始下一行?

        $inner_exported_header_array[] = 'ID';
        $inner_exported_header_array[] = 'First Name';

        $exported_customers_arr [] = $inner_exported_header_array;
        foreach ($_list AS $row) {
            $inner_exported_array = array();
            $inner_exported_array[] = $row['id'];
            $inner_exported_array[] = $row['v_first_name'];

            $exported_customers_arr[] = $inner_exported_array;
        }

        header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
        header('Content-Description: File Transfer');
        header("Content-Type: text/plain");
        header("Content-Disposition: attachment; filename=test.txt");
        header("Pragma: no-cache");
        header("Expires: 0");

        outputCSV($exported_customers_arr); 


function outputCSV($data) {
$outstream = fopen("php://output", "w");

function __outputCSV(&$vals, $key, $filehandler) {
    fputcsv($filehandler, $vals); // add parameters if you want
}

array_walk($data, "__outputCSV", $outstream);
fclose($outstream);
}

输出显示:

"ID","First Name"[special character not copied here]1,Testname

但如果是:

"ID","First Name"
1,Testname

有任何想法,我们的新行应该是一个新行而不是在行尾插入特殊字符并从第一行结束的地方开始新行?

2 个答案:

答案 0 :(得分:1)

这些角色是什么?似乎他们来自你的数据库,不知何故?这些“特殊”字符似乎包含换行符(即\ n),这会混淆你的输出。

我建议使用PHP的ord()函数检查有问题字段的最后一个字符的值:

http://php.net/manual/en/function.ord.php

您可以使用PHP的trim()函数清理CSV输出:

http://php.net/manual/en/function.trim.php

如果应用于每个字段的输出,

trim()也会清除换行符,这应解决您的问题,即更改此内容:

$inner_exported_array[] = $row['v_first_name'];

为:

$inner_exported_array[] = trim($row['v_first_name']);

答案 1 :(得分:1)

评论摘要:

最简单的解决方案可能是简单地阅读文件并用"\n"替换每个"\r\n"。该文件的使用者期望不同的行结尾。