将php输出导出为ex​​cel

时间:2010-08-12 08:05:46

标签: php character-encoding export-to-excel

include_once 'mysqlconn.php';
include_once "functions.php";
$filename = $_GET['par'].".xls";
header("Content-type: application/x-msexcel"); 
header('Content-Disposition: attachment; filename="'.basename($filename).'"'); 
if ($_GET['i'] == "par1") {
  func1();
} else if ($_GET['i'] == "par2") {
  echo "şşşıııİİİ";
  func2();  
} else if ($_GET['i'] == "par3") {  
  echo "şşşıııİİİ";
  func3();  
} 

这是我的export2excel.php文件,func1,2,3在functions.php文件中并生成表输出,除了奇怪的字符编码外,所有工作都很好。我对我的所有文件使用utf-8编码。第二个,如果上面的语句产生健康的编码输出,但是休息2用我喜欢的字符编码我的输出,如“BÃœTÇEİÇİ”。在土耳其人中是“BÜTÇEİÇİ”。

简而言之。相同的文件,相同的编码,相同的数据库但结果不同。

任何想法?

3 个答案:

答案 0 :(得分:19)

Excel使用UTF-16LE + BOM作为默认的Unicode编码 因此,您必须将输出转换为UTF-16LE并添加UTF-16LE-BOM "\xFF\xFE"

进一步的信息:

相反,我会使用现有的一个库

编辑:
如果你真的想要使用现有的库

,那么一些代码可以提供帮助
<?php
$output = <<<EOT
<table>
    <tr>
        <td>Foo</td>
        <td>IñtërnâtiônàlizætiøöäÄn</td>
    </tr>
    <tr>
        <td>Bar</td>
        <td>Перевод русского текста в транслит</td>
    </tr>
</table>
EOT;

// Convert to UTF-16LE
$output = mb_convert_encoding($output, 'UTF-16LE', 'UTF-8'); 

// Prepend BOM
$output = "\xFF\xFE" . $output;

header('Pragma: public');
header("Content-type: application/x-msexcel"); 
header('Content-Disposition: attachment;  filename="utf8_bom.xls"');

echo $output;

答案 1 :(得分:1)

如果有人试图在moodle中使用excel_writer并且输出有编码问题 - 比如说你正在开发一个报告,其中有一个url作为字段中的数据 - 那么在这个例子中我只是修复了这个问题引号中的数据至少在Excel中打开了我的例子:

// Moodles using the PEAR excel_writer export

$table->setup();

$ex=new table_excel_export_format($table);

$ex->start_document( {string} );
$ex->start_table( {string} );

// heading on the spreadsheet
$title = array('Report Title'=>'Report 1');
$ex->add_data($title);
// end heading

$ex->output_headers( array_keys($table->columns) );

**foreach($data as $row){

        $string="'".trim($row->resname,"'")."'";
        $row->resname=$string;
        $ex->add_data( $table->get_row_from_keyed($row) );
}**

$ex->finish_table();
$ex->finish_document();

答案 2 :(得分:0)

Excel使用UTF-16LE作为默认编码。因此,您应该自己将UTF-8转换为UTF-16LE,或者使用经过试验和测试的Excel PHP库之一,而不是尝试重新发明轮子。我建议使用PHPExcel ...