我将php数组导出到csv。
错误是所有特殊字符都搞砸了(例如:áéñ),文件的开头显示field1 而不是 field1 。
问题正在发生,因为内容处理:附件; ,如果我评论该行,则文件创建没有任何问题(遗憾的是它被下载为 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;
有什么想法吗?谢谢!
答案 0 :(得分:1)
正如Dagon评论的那样,是BOM,可能会导致正在读取的文件出现问题(特别是如果它是在Windows上的CMD中完成的)。从脚本文件中删除BOM。
对于特殊字符,您可能需要转换它们,特别是如果您的源不是UTF-8。
我曾遇到类似的问题,我的解决方案是证明输入正确读取并在输出之前转换它们。
为了转换角色,我做了类似的事情:
mb_convert_case($result['products_name'], MB_CASE_UPPER, "UTF-8");
为证明我正在使用UTF-8,我发了
$connection->set_charset("utf8");
连接到我的数据库时。
保重。