2013-07-11 61 views
4

在MySQL中,我已將數據字段類型設置爲utf8_bin,並且我將數據存儲爲Unicode。文本正在網頁中正確顯示。當數據具有UTF8字符時,PHP導出CSV

我想生成excel文件從我的表中導出數據到它。 .xls.cvs中的輸出是 - '????'。

我簽了其他的答案在這裏,它被稱爲使用頁眉:

header("content-type:application/csv;charset=UTF-8");

similar question。但它不工作。使用標題後,在csv中輸出爲 - सà¥,ààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààààà

請幫忙。謝謝。

+0

使用BOM表頭 –

+0

@Mark Ba​​ker是的,我已閱讀了一些文章,但我不知道如何使用它。你能幫我嗎。 – Sajal

+0

在將任何數據輸出到文件之前,將「\ xEF \ xBB \ xBF」寫入文件中。它也可能有助於在BOM之後和數據之前寫入一行「sep =」,或者在數據之前寫入適當的字符,因爲MS Excel的默認分隔符是語言環境特定的 –

回答

15

這個帖子解決我的問題 -

https://stackoverflow.com/a/4762708/2349494

這是什麼做的轉換 -

打印CHR(255)。 chr(254)。 mb_convert_encoding($ csv_output,'UTF-16LE','UTF-8');

此前我得到垃圾字符現在正確的數據導出。

+0

是的,爲我工作! –

+0

請注意,生成的csv將是UTF8的兩倍大小。 需要付出很小的代價才能解決一個長期困擾很多人的毛病問題! –

+0

我想在這裏添加的一個小的發現是,如果你在做tsv而不是csv,那麼添加\ t使用雙引號「」不是單引號「' –

0

請嘗試下面的代碼;

ob_end_clean(); 
$_filename = date('Y_m_d_H_i').".csv"; 

header("Cache-Control: public"); 
header("Content-Type: application/octet-stream"); 
header("Content-Type: text/csv; charset=utf-8"); 
header("Content-Disposition: attachment; filename=$_filename"); 
// Read the file from disk 
readfile($filename); 
exit(); 
+0

@ AshwinP - 不工作亞爾:( – Sajal

+0

請參閱這個''http://stackoverflow.com/questions/4348802/how-can-i-output-a-utf-8-csv-in-php-that-excel-將讀取正確?rq = 1' –

11

我有同樣的問題,我這樣做是通過結合兩件事情:

首先,你得表歸類改變爲UTF8如:「utf8_general_ci」(或僅僅是確保這一點),然後添加該代碼的MySQL查詢後:

mysql_query("SET NAMES utf8"); 

$result = mysql_query("SHOW COLUMNS FROM table WHERE Field NOT IN ('user_id', 'password')"); 
mysql_query("SET NAMES utf8"); 

然後,以此作爲他阿德(根據您的需要調整):

header('Content-Description: File Transfer'); 
header("Content-type: application/vnd.ms-excel"); 
header("Content-disposition: csv" . date("Y-m-d") . ".csv"); 
header("Content-disposition: filename=".$filename.".csv"); 
header('Content-Transfer-Encoding: binary'); 
header('Pragma: public'); 
print "\xEF\xBB\xBF"; // UTF-8 BOM 
print $csv_output; 
exit; 
+0

din't工作我的朋友。顯示在elx/csv文件中的垃圾字符。我已經把所有代碼放在這裏。Plz check - http://oxyjone.blogspot.in/2013/07 /generating-excel-having-utf-8.html – Sajal

+1

我認爲它是我的錯! mysql_query(「SET NAMES utf8」);應該是主要查詢!:) – Poorya

+0

提示:「\ xEF \ xBB \ xBF」BOM在使用nginx時給你一個錯誤,你不能用它強制下載。這個時間浪費了幾個小時。 – lsouza

4

我有一個變種Sajal響應,並發現它php.net在:http://www.php.net/manual/en/function.iconv.php#104287

回聲這在CSV內容的開頭:

chr(255).chr(254).iconv("UTF-8", "UTF-16LE//IGNORE", $data) 

我喜歡用iconv(),但它看起來和mb_convert_encoding()一樣。 不要忘記用製表符替換;\t),它對我來說工作得很好!