今天有一同學問我為什麼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個字節表示一個符號,根據不同的符號而變化字節長度