2017-06-12 50 views
-1

通過從mysql表中提取數據我正在生成csv文件並上傳到某個ftp文件夾。但其他人從ftp端使用這個csv文件說它是ANSI編碼。我如何將其更改爲UTF-8編碼?爲此,我使用下面的代碼。如何用默認的UTF-8編碼生成csv文件使用php

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。我在哪裏做錯了?任何幫助將不勝感激。

+0

如果您明確強制應用程序(Notepad ++或其他)將文件視爲UTF-8,內容是否正確顯示?然後它是UTF-8。如果內容只包含基本的ASCII字符,那麼UTF-8與幾乎所有其他編碼都是無法區分的,而記事本等。只是猜測不正確。 – deceze

+0

爲什麼這個標記爲mysql? –

回答

1

我相信你需要在文件開頭添加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);