我正在导出一个php数组到csv。
错误是所有特殊字符都搞砸了(例如:
这个问题是因为Content-disposition: attachment;,如果我注释那一行,文件就会被创建而没有任何问题(遗憾的是它被下载为FILENAME.php扩展名)。
# CSV headers
header('Cache-Control: public');
header('Content-Type: application/octet-stream');
header('Content-type: application/csv; charset=utf-8');
header('Content-disposition: attachment; filename='.date('Y-m-d H'hi').'.csv');
# Columns
$o = 'field1,field2,field3,field4';
$o .= "'n";
# Data
$rows = array();
foreach($data as $item) {
$fields = array();
foreach($item as $field) {
$fields[] = $field;
}
$rows[] = implode(', ', $fields);
}
$o .= implode("'n", $rows);
echo $o;
任何想法?谢谢!
正如Dagon所评论的,是BOM,可能会导致正在读取的文件出现问题(特别是如果它在Windows上的CMD中完成)。从脚本文件中删除BOM。
对于特殊字符,您可能需要转换它们,特别是如果您的源不是UTF-8。
我曾经遇到过类似的问题,我的解决方案是证明输入被正确读取并在输出之前转换它们。
对于转换字符,我做了这样的操作:mb_convert_case($result['products_name'], MB_CASE_UPPER, "UTF-8");
为了证明我使用的是UTF-8,我发布了
$connection->set_charset("utf8");
连接到我的数据库时。
照顾。