2

私はしばらくこれにいました。PHPスクリプト(データベースからデータを取得する)から.csvファイルを作成しようとしています。私の問題は、特殊文字が正しく表示されないことです。

奇妙なことに、データベースからの特殊文字が正しく表示されますが、特定の文字をエントリに追加する必要があります。

たとえば、データベースは「Humidité」(フランス語で湿度) を返します。これは、エクスポートされた .csv に正しく表示されます。

しかし、phpスクリプトから文字列を追加するとしましょう

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

csvで私は見るでしょう

Humidité: 10% [weird characters] 20%

したがって、umimité の「é」は問題ありませんが、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 に答える