程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> PHP生成CSV文件用Excel打開亂碼問題

PHP生成CSV文件用Excel打開亂碼問題

編輯:關於PHP編程

今天有一同學問我為什麼PHP生成CSV文件用Excel打開會出現亂碼呢,下面小編來給大家找了一些常見的辦法,希望此方法對各位朋友會有所幫助。

百度查證後得知

PHP生成UTF-8編碼的CSV文件用Excel打開中文顯示亂碼,是由於輸出的CSV文件中沒有BOM。

我們只要簡單處理一下即可

那麼如何在PHP中輸出BOM呢?

在所有內容輸出之前

 代碼如下 復制代碼

print(chr(0xEF).chr(0xBB).chr(0xBF));


例.php生成csv時我們可以這樣

 代碼如下 復制代碼

<?php
$now = gmdate("D, d M Y H:i:s");
header("Expires: Tue, 03 Jul 2001 06:00:00 GMT");
header("Cache-Control: max-age=0, no-cache, must-revalidate, proxy-revalidate");
header("Last-Modified: {$now} GMT");
 
// force download
header("Content-Type: application/force-download");
header("Content-Type: application/octet-stream");
header("Content-Type: application/download");
 
// disposition / encoding on response body
header("Content-Disposition: attachment;filename={$filename}");
header("Content-Transfer-Encoding: binary");
$items_data=array(
'0'=>array('title'=>'test test test1'),
'1'=>array('title'=>'test test test2'),
'2'=>array('title'=>'test test test3')
)
print(chr(0xEF).chr(0xBB).chr(0xBF));//設置utf-8 + bom ,處理漢字顯示的亂碼
echo array2csv($items_data);
 
function array2csv(array &$array)
{
   if (count($array) == 0) {
     return null;
   }
   ob_start();
   $df = fopen("php://output", 'w');
   fputcsv($df, array_keys(reset($array)));
   foreach ($array as $row) {
      fputcsv($df, $row);
   }
   fclose($df);
   return ob_get_clean();
}
?>

還有一種辦法就是使用Office

打開Microsoft Office 2010 Excel,數據-自文本,如圖:

導入此csv格式文件,同樣要求選擇編碼,如圖:

  這裡選擇UTF-8,打開後,發現亂碼消除,如圖:

  補:UTF-8是在互聯網上使用最廣的一種unicode編碼的實現方式。UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved