如何解决ECShop 批量上传商品乱码的问题

发布时间:2020-01-17编辑:脚本学堂
ECShop 批量上传商品时会有乱码问题出现呢?如何解决呢,本文分享下我的方法,并介绍了PHPExcel类库的用法,有需要的朋友参考学习下。

本节内容:
解决ECShop 批量上传商品乱码的问题

问题描述:
ECShop后台用CSV批量上传商品数据包出现一堆乱码,字段完全对不上。

原因分析:
ECShop读CSV的方式弱爆了。

在 admin/ 目录下找到good_batch.php 这段代码:
 

复制代码 代码示例:
<?php
/* 将文件按行读入数组,逐行进行解析 */ 
$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 编码(客户用淘宝助理导出),结果就乱码了。

例子:
 

复制代码 代码示例:
<?php
// 转换编码 
if (($_POST['charset'] != 'UTF8') && (strpos(strtolower(EC_CHARSET), 'utf') === 0)) 

    $line = ecs_iconv($_POST['charset'], 'UTF8', $line); 

phpexcelReader 导入excel 文件就工作得很好,编码都不存在问题。
于是,把这段代码改了。
 

复制代码 代码示例:
<?php
/* 将文件按行读入数组,逐行进行解析 */ 
$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']; 

phpExcelReader 包含两个文件,使用时需要将 Excel/reader.php include 进来。
修改完之后,问题解决。

有关PHPExcel的文章,请参考如下链接:

phpExcel实现的excel操作类
PHPExcel常用方法举例
php导出excel的简单范例 使用phpexcel类库导出excel
phpExcel类的使用方法分享
phpexcel导出excel的经典实例
PHPExcel读取excel文件的例子
phpexcel类库实例 支持(excel2003 excel2007)
phpexcel导出数据的实例代码
phpexcel导入excel到数据库的代码
phpexcel快速开发指南(不错)
phpExcel中文帮助手册(知识点)
使用PHPExcel判别和格式化Excel中的日期格式的例子
phpexcel导出excel的颜色与网页中颜色不一致的解决方法
CI中使用PHPExcel导出数据到Excel