ホームページ >バックエンド開発 >PHPチュートリアル >php Excelでエクスポートした文字化けに関する問題

php Excelでエクスポートした文字化けに関する問題

WBOY
WBOYオリジナル
2016-06-13 12:00:12881ブラウズ

php Excelエクスポートでコードが文字化けする問題

/**<br />     * 用于生成excel文件的函数<br />     * author:walker<br />     * @param $data 生成excel的数据(二维数组形式)<br />     * @param null $savefile 生成excel的文件名(保不指定,则为当前时间戳)<br />     * @param null $title 生成excel的表头(一维数组形式)<br />     * @param string $sheetname 生成excel的sheet名称(缺省为sheet1)<br />     */<br />    function exportExcel($data,$savefile=null,$title=null,$sheetname='sheet1'){<br />        //若没有指定文件名则为当前时间戳<br />        if(is_null($savefile)){<br />            $savefile=time();<br />        }<br />        //若指字了excel表头,则把表单追加到正文内容前面去<br />        if(is_array($title)){<br />            array_unshift($data,$title);<br />        }<br />        import('Org.Util.PHPExcel');<br />		import('Org.Util.PHPExcel.IOFactory');<br />        import('PHPExcel.Util.PHPExcel.Reader.Excel5');<br />        $objPHPExcel = new \PHPExcel();<br />        //Excel内容<br />        foreach($data as $k => $v){<br />            $obj=$objPHPExcel->setActiveSheetIndex(0);<br />            $row=$k+1;//行<br />            $nn=0;<br />            foreach($v as $vv){<br />                $col=chr(65+$nn);//列<br />                $vv = iconv("UTF-8", "GB2312//IGNORE",$vv);<br />                $obj->setCellValue($col.$row,$vv);//列,行,值<br />                $nn++;<br />            }<br />        }<br />        $objPHPExcel->getActiveSheet()->setTitle($sheetname);<br />        $objPHPExcel->setActiveSheetIndex(0);<br />        header('Content-Type: application/vnd.ms-excel');<br />        header('Content-Disposition: attachment;filename="'.$savefile.'.xls"');<br />        header("Content-Type: application/vnd.ms-excel; charset=UTF-8");<br />        header('Cache-Control: max-age=0');<br />        $objWriter = \PHPExcel_IOFactory::createWriter($objPHPExcel, 'Excel5');<br />        $objWriter->save('php://output');<br />        exit;<br />    }<br />    <br /> /**<br />     *<br />     * 导出Excel<br />     */<br />    function expUser(){//导出Excel<br />        $xlstitle  = array('id','商品编码','模板编号','商品名称','总库存','当前库存','供应商');<br />        $xlssql = M('erp_inventory');<br />        $xlsData  = $xlssql->getField('id,p_code,mid,pname,banlance,cur_banlance,factory');<br />//         show_bug($xlsData);die;<br />        $this->exportExcel($xlsData,time(),$xlstitle);<br />         <br />    }



上記は私のコードです。thinkphpフレームワークを使用しています。2番目の画像はエクスポート後の効果、問題が発生する場所と方法です。それを解決するには?
------解決策----------------------
thinkphp を使用しているため、次のようになります。 utf-8
そして、PHPExcel のデフォルトの文字セットも utf-8
それでは、なぜ
$vv = iconv("UTF-8", "GB2312//IGNORE",$vv) が必要なのでしょうか;
utf-8 を gb2312 に変換しますか?


-----解決策---------------------------- -
理解できない?私はそれを明らかにしませんでしたか?ヒューリスティックな解決策は受け入れられないようです

トランスコードに iconv を使用するステートメントをすべて削除してください!
これは明らかですよね?
PHPExcel を使用して Excel に書き込まれるデータは、UTF-8 でエンコードされたデータである必要があります
これは理解すべきですよね?

-----解決策--------------------------------
gbk に変換して見てください。iconv を火星文字と繁体字中国語の文字に変換するときに問題が発生します
$vv = mb_convert_encoding($vv =, "GBK","UTF-8");
------解決策--- ------------------
38 削除する必要はありません

の場合まだ動作しません。スクリーンショットを投稿してください
--- ---解決策------------------
はい、転送しました

前にも言ったように、私は一人です コード スニペットのテストには問題ありません。
したがって、問題は他の場所にある可能性があります。受信データ、テーブルから読み取られたデータ、または使用する phpexcel クラスなどです。

include 'PHPExcel/Classes/PHPExcel.php '; /> // インポート (' ORG.UTIL.PEXCEL.IFActory '); <br> // インポート (' PHPEXCEL.PHPEXCEL.Reader.excel5 ');
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。