我正在使用以下标头命令生成csv文件:
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文件以这种编码保存?
答案 0 :(得分:12)
在发出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;
答案 1 :(得分:9)
使用utf8_decode() - 为我工作
答案 2 :(得分: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发布如上,但是由于我对这个烦人的问题感到沮丧,我错过了它,所有修复现在都在工作。希望这有助于某人...