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

PHP 生成 CSV 文件:Tab 分隔與逗號分隔的完整實現指南

     編輯:PHP 綜合知識

概述

CSV(Comma-Separated Values)是數據交換的常用格式。本文介紹如何使用 PHP 生成支援 Tab 鍵分隔與逗號分隔兩種格式的 CSV 文件,並解決中文編碼與 BOM 頭問題。

Tab 分隔 CSV 實現(適用於 Excel 直接打開)

<?php
// 設置響應頭
header("Content-type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=export_tab.csv");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
header('Pragma: public');

// 準備數據:使用 \t 作為分隔符,\n 換行
$data = "\xEF\xBB\xBF" . "欄位1\t欄位2\t欄位3\n數據1\t數據2\t數據3";

// 關鍵:轉為 UCS-2 編碼,確保 Excel 正確識別中文
$data = iconv('utf-8', 'ucs-2', $data);
echo $data;
?>

關鍵點解析

  • \xEF\xBB\xBF:UTF-8 BOM 頭,告訴 Excel 此文件為 UTF-8 編碼
  • iconv('utf-8', 'ucs-2'):將 UTF-8 轉為 UCS-2LE,Excel 對此編碼支援最佳
  • \t:Tab 字符,Excel 會自動識別為分隔符

逗號分隔 CSV 實現(標準格式)

<?php
header("Content-type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=export_comma.csv");
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Expires: 0');
header('Pragma: public');

$data = "欄位1,欄位2,欄位3\n數據1,數據2,數據3";

// 中文環境建議轉 GBK,避免 Excel 亂碼
$data = iconv('utf-8', 'gbk', $data);
echo $data;
?>

編碼選擇建議

目標環境推薦編碼備註
Excel (Windows)GBK / UCS-2原生支援最好
Excel (Mac)UTF-8 + BOM較新版本支援良好
文本編輯器/程序解析UTF-8通用標準

進階:使用 fputcsv 處理複雜數據

對於包含逗號、換行符、引號的複雜字段,建議使用內建 fputcsv():

$fp = fopen('php://output', 'w');
// 寫入 BOM
fwrite($fp, "\xEF\xBB\xBF");
// 寫入標題
fputcsv($fp, ['姓名', '地址', '備註'], "\t");
// 寫入數據
fputcsv($fp, ['張三', '北京市,朝陽區', '包含"引號"'], "\t");
fclose($fp);

總結

  • Tab 分隔 + UCS-2:最適合 Excel 直接雙擊打開
  • 逗號分隔 + GBK:中文 Windows 環境下兼容性佳
  • 務必設置正確的 Content-Disposition 強制下載
  • 複雜數據請使用 fputcsv() 自動處理轉義
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved