PHP生成UTF-8編碼的CSV文件用Excel打開中文顯示亂碼,是由于輸出的CSV文件中沒有BOM,我們只要簡單處理一下即可,那么如何在PHP中輸出BOM呢?在所有內容輸出之前:
例.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 wordlink_affiliate">Office 2010 Excel,數據-自文本,導入此csv格式文件,同樣要求選擇編碼,這里選擇UTF-8,打開后,發現亂碼消除.
補:UTF-8是在互聯網上使用最廣的一種unicode編碼的實現方式。UTF-8最大的一個特點,就是它是一種變長的編碼方式。它可以使用1~4個字節表示一個符號,根據不同的符號而變化字節長度.
新聞熱點
疑難解答