本节内容:
解决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