1. 程式人生 > >ECShop 批量上傳商品亂碼問題解決

ECShop 批量上傳商品亂碼問題解決

    /* 將檔案按行讀入陣列,逐行進行解析 */
    $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'];