如何使用php生成默认UTF-8编码的csv文件

fcy6dtqo  于 12个月前  发布在  PHP
关注(0)|答案(2)|浏览(135)

通过从mysql表中获取数据,我正在生成csv文件并上传到一些ftp文件夹。但其他人使用此csv文件从ftp端说,它是在ANSI编码。如何将其更改为UTF-8编码?为此,我使用下面的代码。

header('Content-Encoding: utf-8');
   header('Content-Type: text/csv; charset=utf-8');
    $fh1 = fopen($current_csv_name, 'w+');
    foreach($csv_data as $curl_response)
    {
        fputs($fh1, implode($curl_response, ';')."\n");
    }
    fclose($fh1);

当我下载文件并在记事本中打开并单击保存时,它总是显示编码为ASNI。我哪里做错了?任何帮助将不胜感激。

6uxekuva

6uxekuva1#

我相信你需要在文件的开头添加BOM(字节顺序标记),否则,文件系统将始终假设你的字符集默认为ANSI。试着这样做:

header('Content-Encoding: utf-8');
header('Content-Type: text/csv; charset=utf-8');
$fh1 = fopen($current_csv_name, 'w+');

$bom = chr(0xEF) . chr(0xBB) . chr(0xBF);
fputs($fh1, $bom);

foreach($csv_data as $curl_response)
{
    fputs($fh1, implode($curl_response, ';')."\n");
}
fclose($fh1);
bwitn5fc

bwitn5fc2#

假设数据库中的数据是UTF,那么您需要修改生成文档的方式。
在我的代码中,我使用iconv将一个裸echo替换为一个修改后的echo:

// echo $csv;
echo iconv("UTF-8", "ISO-8859-2", $csv);

相关问题