ECShop 批量上傳商品亂碼問題解決
阿新 • • 發佈:2019-02-01
/* 將檔案按行讀入陣列,逐行進行解析 */
$line_number = 0;
$arr = array();
$goods_list = array();
$field_list = array_keys($_LANG['upload_goods']); // 欄位列表
$data = file($_FILES['file']['tmp_name']);
用file方法將每行作為一個記錄讀入陣列 $data 中。這裡會有個問題,當商品描述裡出現換行符,讀入就會出錯。 繼續往下看。ECShop 根據上傳時選擇的編碼型別,如果不是 UTF-8 則會強制轉換成 UTF-8。但也只是支援中文GB2312編碼,客戶上傳的資料包卻是 Unicode 編碼(客戶用淘寶助理匯出),結果就亂碼了。
// 轉換編碼
if (($_POST['charset'] != 'UTF8') && (strpos(strtolower(EC_CHARSET), 'utf') === 0))
{
$line = ecs_iconv($_POST['charset'], 'UTF8', $line);
}
EC 的編碼轉換果真是奇葩,好端端的mb庫放著不用,偏要自己搞一套。用 phpExcelReader 匯入Excel 檔案就工作得很好,編碼都不存在問題。於是,把這段程式碼改了。/* 將檔案按行讀入陣列,逐行進行解析 */ $line_number = 0; $arr = array(); $goods_list = array(); $field_list = array_keys($_LANG['upload_goods']); // 欄位列表 $reader = new Spreadsheet_Excel_Reader(); $reader->setOutputEncoding('utf-8'); $reader->read($_FILES['file']['tmp_name']); $data = $reader->sheets[0]['cells'];