php到csv和特殊字符


php to csv and special characters

我已经做了一段时间了。我正试图从php脚本(从数据库中获取数据)创建一个.csv文件。我的问题是特殊字符没有正确显示。

奇怪的是,来自数据库的特殊字符显示正确,但问题是我需要在条目中添加某些字符。

例如,数据库返回"Huminité"(法语中湿度的意思)。这在导出的.csv.中正确显示

但假设我从php脚本中添加了一个字符串

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

在csv中,我将看到

Humidité: 10% [weird characters] 20%

所以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服务器。

当我发现这一点时,我在php.ini中更改了default_charset = "utf-8",并在httpd.conf-bu中添加了AddDefaultCharset UTF-8,但这并没有解决问题

有什么想法吗?谢谢

可能您的编辑器没有设置为UTF-8。检查编辑器的字符集设置。您也可以使用Notepad++等编辑器转换文件。

您需要告诉PHP和MySQL您的数据是UTF-8,因为它们都默认为ASCII(或者至少对我来说是这样)。我用

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

这似乎奏效了。