fputcsv在字段末尾添加奇怪的字符


fputcsv adding strange characters at the end of fields

我有一个加密并存储用户条目的表单。然后我有一个导出功能,允许管理员解密并导出所有条目的csv。

它解密很好,如果我把数组打印到页面上,一切看起来都很好,但当我生成CSV时,它会在一些数据后面添加奇怪的符号,当在记事本或excel中打开时,一些单元格中有问号、音乐符号、菱形和其他奇怪的字符,但不是全部。我找不到模式——如果我在标题字段中添加"小姐"或"先生",它会添加字符,如果我添加我的名字(佐伊),它不会!我的数据存储为BINARY,但我已经将一些字段更改为VARCHAR,这没有什么区别,我还尝试了utf8_encoding我的数据。

这是我的代码:

header('Content-Type: text/csv; charset=utf-8');
header('Content-Disposition: attachment; filename=data.csv');
$output = fopen('php://output', 'w');
fputcsv($output, array('Title', 'First Name', 'Last Name', 'Address', 'Age', 'Email', 'I am...'));
$encryption_key = ""; 
//then I do my database select
foreach ( $theresults as $result ) {
//then I decrypt my data and pass it in to variables
$responses = array($title,$fname,$lname,$address,$age,$emailadd,$who);
fputcsv($output, $responses);
}

我注意到的一件事是,当我在记事本中打开它时,每个元素周围的引号都不一致(这很不幸没有奇怪的字符,因为它不会将它们复制到stackoverflow中):

Title,"First Name","Last Name",Address,Age,Email,"I am..."
Miss,Zoe,Tester,,29,,other
Zoe,Zoe,Zoe,Zoe,29,,other
Mr,Test,Testington,"an address",35,,diagnosed

任何帮助都将不胜感激,我在任何地方都找不到任何类似问题的帖子!

您需要在fputcsv、分隔符和外壳中指定更多参数。

fputcsv($output, array(...), ',', '"');

CSV文件中的分隔符应为';'。如果你的分隔符是',',你会遇到一些地址问题。