件中以逗號作為分隔值,如果資料庫記錄中有英文逗號(注:以下符號若無特別說明皆指英文符號)怎麼辦?當然你可以先將資料中的逗號替換為中文逗號,但其實還有一個方法,那就是如果CSV文件相應的欄位兩端加上雙引號("即" "")作分隔值,其間的英文逗號不作為分隔值,且欄位中連續兩個英文雙引號(即"""")也只作為一個顯示,而不作為分隔值。
有了這些認識,我們就可以編寫導出CSV文件的PHP文件了:
<? //這一行一定要放在程式的開始地方,不能有空格或換行。因為下面的header()函數不允許在使用前向用戶輸出任何東西。
$dfname="tofoxmail.csv"; //生成的檔案名
//連接mySQL資料庫:
mysql_connect("localhost","yourname","yourpassword") or die("不能連接資料庫!");
mysql_select_db("alumni") or die("資料庫發生錯誤!");
if($action=="downit"){
$getdata=mysql_query("SELECT name,email,oicq FROM classdata"); //選擇資料表中指定記錄
//如果沒有資料,則:
if(@mysql_num_rows($getdata)==0){
echo "對不起,還沒有任何資料!";
exit;
}
//以下生成一個文件供下載:
header("Content-disposition: filename=$dfname");
header("Content-type: unknown/unknown");
echo "姓名,電子郵件地址,OICQ,foxaddrID"; //輸出第一行,Foxmail地址簿的欄位
$i=1;
while($row=mysql_fetch_array($getdata)){ //取得資料類型的值
//將資料中每一個雙引號替換為兩個:
$row[name]=str_replace("\"","\"\"",$row[name]);
$row[email]=str_replace("\"","\"\"",$row[email]);
$row[oicq]=str_replace("\"","\"\"",$row[oicq]);
//輸出相應欄位對應的值的行,每個值用雙引號和逗號作分隔符號:
echo base64_decode("DQo=")."\"$row[name]\",\"$row[email]\",\"$row[oicq]\",$i";
/*上式中"base64_decode("DQo=")"是換行符,之所以不用"\n",是因為兩者不完全相同,
用後者將可能導致Foxmail導入失敗。
*/
$i++;
}
exit;
}
?>
<!--如果不是點擊了下載的鏈結,則顯示以下HTML內容-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>導出資料到Foxmail地址簿</title></head>
點擊<a href='javascript:this.location=this.location+"?action=downit"'>這裏</a>下載文件,保存並導入到您的Foxmail地址簿中。
操作方法
有了這些認識,我們就可以編寫導出CSV文件的PHP文件了:
<? //這一行一定要放在程式的開始地方,不能有空格或換行。因為下面的header()函數不允許在使用前向用戶輸出任何東西。
$dfname="tofoxmail.csv"; //生成的檔案名
//連接mySQL資料庫:
mysql_connect("localhost","yourname","yourpassword") or die("不能連接資料庫!");
mysql_select_db("alumni") or die("資料庫發生錯誤!");
if($action=="downit"){
$getdata=mysql_query("SELECT name,email,oicq FROM classdata"); //選擇資料表中指定記錄
//如果沒有資料,則:
if(@mysql_num_rows($getdata)==0){
echo "對不起,還沒有任何資料!";
exit;
}
//以下生成一個文件供下載:
header("Content-disposition: filename=$dfname");
header("Content-type: unknown/unknown");
echo "姓名,電子郵件地址,OICQ,foxaddrID"; //輸出第一行,Foxmail地址簿的欄位
$i=1;
while($row=mysql_fetch_array($getdata)){ //取得資料類型的值
//將資料中每一個雙引號替換為兩個:
$row[name]=str_replace("\"","\"\"",$row[name]);
$row[email]=str_replace("\"","\"\"",$row[email]);
$row[oicq]=str_replace("\"","\"\"",$row[oicq]);
//輸出相應欄位對應的值的行,每個值用雙引號和逗號作分隔符號:
echo base64_decode("DQo=")."\"$row[name]\",\"$row[email]\",\"$row[oicq]\",$i";
/*上式中"base64_decode("DQo=")"是換行符,之所以不用"\n",是因為兩者不完全相同,
用後者將可能導致Foxmail導入失敗。
*/
$i++;
}
exit;
}
?>
<!--如果不是點擊了下載的鏈結,則顯示以下HTML內容-->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<title>導出資料到Foxmail地址簿</title></head>
點擊<a href='javascript:this.location=this.location+"?action=downit"'>這裏</a>下載文件,保存並導入到您的Foxmail地址簿中。
操作方法
回复Comments
作者:
{commentrecontent}