需求
運營的同學編輯好問題後,放入csv檔案中。上傳csv檔案,將檔案中的問題批量匯入問答庫中,並記錄編輯考核數量。需要按批次記錄上傳資料,並可以進行分批次查詢與資料匯出
匯入
讀取csv檔案有兩種辦法,一種是用file方法讀取全部行,然後用逗號進行分割。但是這種辦法碰到文章中本身有逗號的情況就會有問題。另外一種就是用fgetcsv方法,這種方法比較靠譜。
while($data = fgetcsv($fileObj)){
$title = $data[0];
$content = $data[1];
}
讀取出來有個編碼的問題。因為每個人環境不一樣,導致上傳者的編碼很有可能不一致。這樣解決:
function getSafeStr($str){
$s1 = iconv('utf-8','gbk//IGNORE',$str);
$s0 = iconv('gbk','utf-8//IGNORE',$s1);
if($s0 == $str){
return $s1;
}else{
return $str;
}
}
之前試過通過判斷輸入資料的編碼得到這個編碼,然後再做編碼轉化,效果不行。
匯出
用table的方式匯出資料。注意頭資訊的設定:
$ExcelStr = '<html>
<head>
<meta http-equiv="Content-type" content="text/html;charset=UTF-8" />
</head>
<body><table><tr><th>Id</th><th>標題</th><th>使用者</th><th>回覆數</th><th>提問時間</th><th>url地址</th></tr> ';
if($data && is_array($data)){
foreach ($data as $dk => $dv){
$url = "http:///{$dv['z_id']}.html";
$key = $dk + 1;
$askTime = date("Y-m-d H:i:s",$dv['z_ask_time']);
$ExcelStr.= "<tr><td>{$key}</td><td>{$dv['z_title']}</td><td>{$dv['z_userid']}</td><td>{$dv['z_reply']}</td><td>{$askTime}</td><td>{$url}</td></tr>";
}
}
$ExcelStr .= "</table></body></html>";
$ExcelStr = Libs_Global_Fun::changeCode($ExcelStr);
header('Cache-Control: no-cache, must-revalidate');
header('Content-type: application/vnd.ms-excel;');
header('Content-Disposition: filename=' . date("Y年m月d日") . $patchId . '.xls');
exit($ExcelStr);
本作品採用《CC 協議》,轉載必須註明作者和本文連結