首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 匯出 CSV 自動加入 BOM 標頭,解決 Excel 亂碼問題

     編輯:PHP 相關知識

當 PHP 產生 UTF-8 編碼的 CSV 檔案供 Excel 開啟時,若缺少 BOM (Byte Order Mark),中文內容常會顯示亂碼。本文說明 BOM 概念並提供一鍵加入的實作程式碼。

什麼是 BOM?

BOM 是位於檔案最前端的幾個不可見位元組 (EF BB BF),告訴編輯器或試算表軟體:「這是 UTF-8 編碼」。Windows 記事本儲存 UTF-8 時會自動加入,但 PHP 輸出檔案預設不包含。

實作程式碼

在輸出 CSV 內容前,直接輸出 BOM 字元:

$filename = "export_" . date('Ymd') . ".csv";

// 設定下載標頭
header('Expires: ' . gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME'] + 10) . ' GMT');
header('Cache-Control: max-age=10');
header('Content-Type: text/csv; charset=utf-8');
header("Content-Disposition: attachment; filename={$filename}");

// 輸出 BOM (UTF-8)
echo "\xEF\xBB\xBF";

// 假設 $table 為二維陣列資料
foreach ($table as $row) {
    echo implode(",", $row) . "\r\n";
}

關鍵點說明

  • \xEF\xBB\xBF 為 UTF-8 BOM 的十六進位表示
  • 必須在任何實際內容輸出之前發送
  • 搭配 charset=utf-8 標頭,雙重確保編碼正確

適用場景

後台匯出會員名單、訂單報表、資料備份等需由 Excel 開啟的 CSV 下載功能。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved