我使用了以下标题来创建包含希腊字符的xls文件。
首次尝试:
header("Content-Type: application/$file_type;charset=utf-8");
header("Content-Disposition: attachment; filename=$file_name.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
第二次尝试:
header("Content-Type: application/$file_type;charset=windows-1253");
header("Content-Disposition: attachment; filename=$file_name.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");
创建的文件虽然包含正确的希腊字符(用文本编辑器查看),但是当我在ms-excel上打开它时希腊字符显示为sympols。
我还尝试过一个创建xls(打开xls二进制格式)的库,结果相同。该库具有设置代码页和字符集的选项,但仍然没有。
任何想法?
感谢。
答案 0 :(得分:1)
如果您正在使用库,那么它应该具有将编码设置为UTF-8的功能。例如,使用PEAR的Spreadsheet_Excel_Writer(http://pear.php.net/package/Spreadsheet_Excel_Writer/redirected),您可以这样做:
<?php
$workSheet = & $workBook -> addWorksheet('Students');
$workSheet -> setInputEncoding('utf-8');
?>
当然,您还必须确保您的数据实际上是utf-8而不是ISO-8859-7或Windows-1253。 请注意,这不支持更改工作簿名称(即使用'Μαθητές'而不是'学生')
答案 1 :(得分:0)
我对XLS文件不太确定,但如果您更喜欢使用Excel可读的CSV文件,请使用UTF-16编码(带BOM)和制表符作为分隔符
header('Content-Description: File Transfer');
header('Content-Type: text/csv');
header('Content-Disposition: attachment; filename=export.csv');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
echo chr(255) . chr(254); // Add UTF-16 little-endian BOM
echo mb_convert_encoding("α\tβ\tγ"), 'UTF-16LE', 'UTF-8'); // from UTF-8 to UTF-16