php 多語言(UTF-8編碼)匯出Excel、CSV亂碼解決辦法之匯出UTF-8編碼的Excel、CSV

來源:互聯網
上載者:User

標籤:檔案名稱   content   匯出excel   text   ade   com   繁體   bom   color   

轉自:  https://www.cnblogs.com/kclteam/p/5278926.html 

新項目,大概情況是這樣的:可能存在多國、不同語種使用者,比喻有中文、繁體中文,韓文、日本等等,開發時選擇了UTF-8編碼,開發順利,沒有問題。昨天做了一個csv匯出功能,匯出的東西完全亂了:

設定mb_convert_encoding($content,"gb2312","UTF-8")的時候中文正常

設定mb_convert_encoding($content,"shift-jis","UTF-8")的時候日文正常

設定mb_convert_encoding($content,"UTF-8","UTF-8")的時候,都不正常

google了一下原因,我理解的大概意思是微軟的csv等不支援uft-8編碼,而是支援UTF-16LE編碼,故做以下設定

1 //輸出BOM2 echo(chr(255).chr(254));3 echo(mb_convert_encoding($content,"UTF-16LE","UTF-8"));

 

各種語言正常顯示

以下是完整function,支援雙位元組檔案名稱(比如日文或中文檔案名稱)不亂碼

 1 <?php 2 /** 3  *匯出到CSV檔案 4  * @param $data   匯出數組 5  * @param $file_name 檔案名稱 6  */ 7 function export_csv($data,$file_name=‘‘) 8 { 9 10     $file_name = $file_name.‘_‘.date(‘YmdHi‘).‘.csv‘;11     $encoded_filename  = urlencode($file_name);12         $encoded_filename  = str_replace("+","%20",$encoded_filename );13     $content = array_to_string($data);14     header(‘Cache-control: private‘);15     //判斷瀏覽器,輸出雙位元組檔案名稱不亂碼16     $ua = $_SERVER["HTTP_USER_AGENT"];17     if (preg_match("/MSIE/", $ua)) {18         header(‘Content-Disposition: attachment; filename="‘ . $encoded_filename . ‘"‘);19     }20     else if (preg_match("/Firefox/", $ua)) {21         header(‘Content-Disposition: attachment; filename*="utf8\‘\‘‘ . $file_name . ‘"‘);22     }23     else {24         header(‘Content-Disposition: attachment; filename="‘ . $file_name . ‘"‘);25     }26     if(function_exists(‘mb_convert_encoding‘)){27         header(‘Content-type: text/csv; charset=UTF-16LE‘);28         //輸出BOM29         echo(chr(255).chr(254));30         echo(mb_convert_encoding($content,"UTF-16LE","UTF-8"));31         exit;32     }33 }34 /**35  *匯出資料轉換36  * @param $result37  */38 function array_to_string($result)39 {40     if(empty($result)){41         return i("沒有符合您要求的資料!^_^");42     }43     $size_result = count($result);44     for($i = 0 ; $i < $size_result ;  $i++) {45         $data .= $result[$i]."\n";46     }47     return $data;48 }49 ?>

 

php 多語言(UTF-8編碼)匯出Excel、CSV亂碼解決辦法之匯出UTF-8編碼的Excel、CSV

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.