使用PHP导出excel时编码字符串错误

时间:2016-03-21 08:22:24

标签: php excel codeigniter csv encoding

目前我有一个用于导出到Excel的类,它适用于英语,但是,在其他编码中,例如汉字是错误编码的

https://github.com/bcit-ci/CodeIgniter/wiki/Export-to-Excel-2013

<?php
if (!defined('BASEPATH'))
    exit('No direct script access allowed');

/*
 * Excel library for Code Igniter applications
 * Based on: Derek Allard, Dark Horse Consulting, www.darkhorse.to, April 2006
 * Tweaked by: Moving.Paper June 2013
 */

class Export {

    function to_excel($array, $filename) {
        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename=' . $filename . '.xls');

        //Filter all keys, they'll be table headers
        $h = array();
        foreach ($array->result_array() as $row) {
            foreach ($row as $key => $val) {
                if (!in_array($key, $h)) {
                    $h[] = $key;
                }
            }
        }
        //echo the entire table headers
        echo '<table><tr>';
        foreach ($h as $key) {
            $key = ucwords($key);
            echo '<th>' . $key . '</th>';
        }
        echo '</tr>';

        foreach ($array->result_array() as $row) {
            echo '<tr>';
            foreach ($row as $val)
                $this->writeRow($val);
        }
        echo '</tr>';
        echo '</table>';
    }

    function writeRow($val) {
        echo '<td>' . utf8_decode($val) . '</td>';
    }

}

尝试添加

header("Content-type: text/html; charset=utf-8");

在功能开始但没有运气

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:2)

使用PHPExcel而不是自定义类,而且效果很好

$this->load->library('PHPExcel');
        $this->load->library('PHPExcel/IOFactory');

        $objPHPExcel = new PHPExcel();
        $objPHPExcel->getProperties()->setTitle("Trial Report");

        // Assign cell values
        $objPHPExcel->setActiveSheetIndex(0);

        //Filter all keys, they'll be table headers
        $h = array();
        foreach ($result as $row) {
            foreach ($row as $key => $val) {
                if (!in_array($key, $h)) {
                    $h[] = $key;
                }
            }
        }

        //Writing the first header row
        foreach ($h as $key => $val) {
            $val = ucwords($val);
            $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($key, 1, $val); //first row is 1
        }

        $pos = 0;
        foreach ($result as $r_key => $row) {
            foreach ($row as $col) {
                $objPHPExcel->getActiveSheet()->setCellValueByColumnAndRow($pos, ($r_key + 2), $col); //skip the first row
                $pos++;
            }
            $pos = 0;
        }

        $objWriter = IOFactory::createWriter($objPHPExcel, 'Excel5');

        header('Content-type: application/vnd.ms-excel');
        header('Content-Disposition: attachment; filename="export.xls"');
        $objWriter->save('php://output');

答案 1 :(得分:1)

中国传统(Big5)

header("Content-type: text/html; charset=big5");

更多:

Chinese Simplified (EUC)
    ##charset=EUC-CN 
Chinese Simplified (GB2312)
    ##charset=gb2312 
Chinese Simplified (HZ)
    ##charset=hz-gb-2312 
Chinese Simplified (Mac)
    ##charset=x-mac-chinesesimp 
Chinese Traditional (Big5)
    ##charset=big5 
Chinese Traditional (CNS)
    ##charset=x-Chinese-CNS 
Chinese Traditional (Eten)
    ##charset=x-Chinese-Eten 
Chinese Traditional (Mac)
    ##charset=x-mac-chinesetrad 
    ##charset=950 

here is some fixing details and how to tut ...