2010-11-02 65 views
9

我生成與下面的頭命令csv文件:PHP生成CSV文件在Excel中顯示£爲英鎊符號(£)2007

header("Content-type: text/csv; charset=utf-8; encoding=utf-8"); 
header('Content-Disposition: attachment; filename="products.csv"'); 

如果我在Excel 2007中打開文件,那麼無論何時出現英鎊符號,我都會得到英鎊。但是,如果我在Notepad ++中打開文件,那麼磅符號顯示正常;同樣,如果我將內容類型更改爲text/plain並刪除附件頭,則井號會在瀏覽器中正確顯示。

奇怪的是,如果我轉到Notepad ++中的「格式」菜單,看起來該文件是以「沒有BOM的UTF-8」編碼的。如果我將其更改爲「以UTF-8編碼」,然後保存該文件,井號將在Excel中正確顯示。有沒有一種方法可以讓文件通過PHP保存在這種編碼中?

+1

您需要顯示關於生成文件的PHP腳本的更多詳細信息 – 2010-11-02 10:11:09

+0

我知道UTF編碼的英鎊是£,你可以只輸入英鎊這種方式。我沒有Excel的經驗,所以這可能是一個沒用的評論;) – theorise 2010-11-02 10:11:54

+0

英鎊的UTF編碼不是£ - 這是HTML編碼。您不能在CSV文件中使用HTML編碼。 – Gnuffo1 2010-11-02 10:14:41

回答

11

在發出CSV數據之前輸出0xEF 0xBB 0xBF。如果您處理它,請不要忘記將內容長度標題增加3。

header('Content-type: text/csv;'); 
header('Content-Length: ' + strlen($content) + 3); 
header('Content-disposition: attachment;filename=UK_order_' . date('Ymdhis') . '.csv'); 
echo "\xef\xbb\xbf"; 
echo $content; 
exit; 
+0

如何?回聲「0xEF 0xBB 0xBF」;不起作用。 – Gnuffo1 2010-11-02 10:22:32

+5

echo「\ xef \ xbb \ xbf」; – 2010-11-02 10:24:02

+1

這需要放在什麼文件中? – 2014-11-07 09:31:18

9

使用utf8_decode() - 爲我工作

+0

幫我了,謝謝 – SoluableNonagon 2013-05-10 20:24:04

+0

這個怎麼用? – 2015-01-17 08:06:46

0
header("Expires: Mon, 26 Nov 1962 00:00:00 GMT"); 
header("Last-Modified: " . gmdate('D,d M Y H:i:s') . ' GMT'); 
header("Cache-Control: no-cache, must-revalidate"); 
header("Pragma: no-cache"); 
header('Content-Type: text/csv;'); 
header("Content-Disposition: attachment; filename=".$savename); 
echo utf8_decode($csv_string); 

發佈如上由user769889可是我挫敗的這款V-惱人的問題錯過了,所有的固定和現在的工作。希望這可以幫助別人......