用特殊字符导出数组到CSV ini PHP


Exporting array to CSV ini PHP with special characters

我正在导出一个php数组到csv。

错误是所有特殊字符都搞砸了(例如: ñ),并且文件的开始显示field1而不是field1

这个问题是因为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");

连接到我的数据库时。

照顾。