標籤:檔案名稱 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