2

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

        $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

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

4

2 回答 2

1

Summary from the comments:

The easiest solution may be to simply read the file in and replace every "\n" with "\r\n". The consumer of the file expects different line endings.

于 2013-06-05T15:24:09.110 回答
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']);
于 2013-06-05T06:40:10.940 回答