2012-08-23 60 views
1

我一直在這一段時間。 我試圖從一個PHP腳本(即從數據庫中獲取數據)創建一個.csv文件。 我的問題是特殊字符顯示不正確。php到csv和特殊字符

奇怪的是,來自數據庫的特殊字符顯示正確,但他的事情是我需要添加某些字符的條目。

例如,數據庫返回「Humidité」(法語爲溼度)。 在導出的.csv中正確顯示。

但可以說,我的字符串從我的PHP腳本

$member->humidity . ': 10% à 20%'; 

在CSV添加到它,我會看到

Humidité: 10% [weird characters] 20% 

所以在「E」從humidité是好的,但我不看不到我在PHP中添加的「à」。

我的頭似乎還行,因爲一些特殊字符正確顯示

$data = the whole csv file in a string  

header('Content-Encoding: UTF-8'); 
header('Content-type: text/csv; charset=UTF-8'); 
header("Content-Disposition: attachment; filename=file.csv"); 
header('Content-Transfer-Encoding: binary'); 
header('Expires: 0'); 
header('Cache-Control: must-revalidate, post-check=0, pre-check=0'); 
header('Pragma: public'); 
header("Content-Length: " . strlen($data)); 
echo "\xEF\xBB\xBF"; // UTF-8 BOM 
echo $data; 

所以我的猜測是,這個問題是來自我的Apache服務器。

當我發現this我在我的php.ini中更改了我的default_charset = "utf-8",並在我的httpd.conf中添加了AddDefaultCharset UTF-8 bu,但未解決問題。

任何想法? 謝謝!

+0

你在mysql中的表是UTF8格式嗎? –

+0

@TuhinSubhraDey不,他們在「latin1_swedish_ci」 –

+0

嘗試改變它在UTF 8一般ci然後保存您的數據和其他東西.. –

回答

4

可能您的編輯器未設置爲UTF-8。檢查你的編輯器的字符集設置。您還可以使用編輯器(如Notepad++)轉換文件。

+0

downvote的原因是什麼?唯一沒有正確打印的字符是他在文件中靜態插入的字符。因此,它很可能只是編輯的字符集。 –

+0

Downvote不是我的!我在Dreamweaver,Excel和TextEdit(Mac)中打開了這個文件,所有這三個文件顯示的都完全一樣。 –

+0

@ComputerArts:如果您使用的是Dreamweaver,請查看:http://tlt.its.psu.edu/suggestions/international/web/tips/dreamweaver.html#dreamtype –

-1

你需要告訴PHP和MySQL你的數據是UTF-8,因爲它們都默認爲ASCII(或者至少他們是爲我做的)。我這樣做:

setlocale(LC_ALL, 'en_US.utf8'); 
mysql_query("SET NAMES 'utf8'"); 

這似乎工作。

+0

來自SQL的數據打印正確... –