0

此代码创建一个 csv 文件。但是,我避免在字段中打印逗号,因为它用作分隔符(参见第 22 行)。现在我想从字段中删除(回车和新行)。添加 $somecontent .= str_replace("\n", "", $val); 第23行似乎不起作用。有任何想法吗?

@chmod($export_csv, 0777);
    $fe = @fopen($export_csv."/export.csv", "w+");
    if($fe){           
        $somecontent = "";
        $fields_count = 0;
        // print field headers
        $db->query($sql_view);
        if($row = $db->fetchAssoc()){
            foreach($row as $key => $val){
                if($fields_count++ > 0) $somecontent .= ",";
                $somecontent .= ucfirst($key);
            }
        }
        $somecontent .= "\n"; 

        // print field values
        $db->query($sql_view);
        while($row = $db->fetchAssoc()){
            $fields_count = 0;
            foreach($row as $key => $val){
                if($fields_count++ > 0) $somecontent .= ",";
                $somecontent .= str_replace(",", "", $val);
                $somecontent .= str_replace("\n", "", $val);
            }
            $somecontent .= "\n";                    
        }

        // write some content to the opened file.
        if (fwrite($fe, $somecontent) == FALSE) echo 'file_writing_error'." (export.csv)"; 
        fclose($fe);
    }
4

4 回答 4

2

使用fputcsv函数写入 CSV 文件。PHP 已经具有写入 csv 文件的功能。

您不需要自己处理所有这些已经处理的转义、分隔符。

这将为您处理所有这些事情,并使您免于许多麻烦。

于 2011-04-06T07:42:28.567 回答
1

您可以直接从 MySql执行此操作:

SELECT col1, col2, col3 INTO OUTFILE '/tmp/export.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"'
LINES TERMINATED BY '\n'
FROM test_table;
于 2011-04-06T07:45:32.100 回答
0

你在哪里$somecontent .= str_replace("\n", "", $val)?我在你的代码中找不到它。

您可以指定一个数组作为第一个参数,如图str_replace所示。因此,它将用第二个参数替换数组中存在的每个字符串。

例如,$somecontent .= str_replace(array("\n", "\r"), "", $val);

于 2011-04-06T07:42:55.973 回答
0

你可以尝试这样的事情,玩 ASCII 字符

$somecontent .= str_replace(CHR(10), " ", $val);
$somecontent .= str_replace(CHR(13), " ", $val); 
于 2011-04-06T07:51:43.190 回答