以下为使用的 csv 格式输出代码:

    set_time_limit(0);
    header('Content-Language: zh');
    header('Content-Type: application/vnd.ms-execl; charset=utf-8');
    header('Content-Disposition: attachment;filename="' . $file . '.csv"');
    $fp = fopen('php://output', 'a');
    foreach ($result as $row) {
        fputcsv($fp, get_object_vars($row));
    }
    ob_flush();
    flush();

发现输出的文件中文出现乱码,检查代码文件格式为 utf-8 ,数据库字符集也为 utf-8。

有一文章中介绍,在输出 csv 文件内容之前,输出 utf-8 BOM 就可以修复:

    fwrite($fp, "\xEF\xBB\xBF");

测试输出,中文乱码问题解决。

完整输出示例:

    set_time_limit(0);
    header('Content-Language: zh');
    header('Content-Type: application/vnd.ms-execl; charset=utf-8');
    header('Content-Disposition: attachment;filename="' . $file . '.csv"');
    $fp = fopen('php://output', 'a');
    fwrite($fp, "\xEF\xBB\xBF");
    foreach ($result as $row) {
        fputcsv($fp, get_object_vars($row));
    }
    ob_flush();
    flush();

对于使用 file_put_contents 的示例:

$bom = pack('CCC', 0xef, 0xbb, 0xbf); // 和上面的对应
file_put_contents('pythontab.csv',$bom, FILE_APPEND);
file_put_contents('pythontab.csv',$someData, FILE_APPEND); //写入你想要写入表格的数据