2

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

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

例如,数据库返回“Humidité”(法语为湿度)。这在导出的 .csv 中正确显示。

但是可以说我从我的 php 脚本中添加了一个字符串

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

在 csv 我会看到

Humidité: 10% [weird characters] 20%

所以 umité 中的“é”是可以的,但我没有看到我在 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 服务器。

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

有任何想法吗?谢谢!

4

2 回答 2

4

可能您的编辑器未设置为UTF-8. 检查编辑器的字符集设置。您还可以使用编辑器转换文件,例如Notepad++.

于 2012-08-23T16:32:33.843 回答
0

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

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

这似乎有效。

于 2012-08-23T16:29:59.253 回答