50站长网

ecshop商品批量上传乱码读CSV的方式问题

广告

客户反映,ECShop后台用CSV批量上传商品数据包出现一堆乱码,字段完全对不上。分析了代码后发现,ECShop读CSV的方式弱爆了。在admin/目录下找到good_batch.php这段代码

  1. /*将文件按行读入数组,逐行进行解析*/   

  2. $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编码(客户用淘宝助理导出),结果就乱码了。

  1. //转换编码 if(($_POST['charset']!='UTF8')&&(strpos(strtolower(EC_CHARSET),'utf')===0)) { $line=ecs_iconv($_POST['charset'],'UTF8',$line); }   

EC的编码转换果真是奇葩,好端端的mb库放着不用,偏要自己搞一套。用phpExcelReader导入Excel文件就工作得很好,编码都不存在问题。于是,把这段代码改了。

  1. /*将文件按行读入数组,逐行进行解析*/  

  2.  $line_number=0; $arr=array();  

  3.  $goods_list=array();   

  4. $field_list=array_keys($_LANG['upload_goods']);  

  5. //字段列表 $reader=newSpreadsheet_Excel_Reader();   

  6. $reader->setOutputEncoding('utf-8');   

  7. $reader->read($_FILES['file']['tmp_name']);  

  8.  $data=$reader->sheets[0]['cells'];   

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


广告

本文链接:https://www.50zhan.com/post/12113.html

版权声明:1、本站所提供内容均为作者提供、网友推荐、互联网整理而来,仅供学习参考,如有侵犯您的版权,请联系我们,本站将在三个工作日内改正。
2、若您的网站或机构从本站获取的一切资源进行商业使用,除来源为本站的资料需与本站协商外,其他资源请自行联系版权所有人。
3、本站不保证资源的准确性、安全性和完整性,请您在阅读、下载及使用过程中自行确认,本站亦不承担上述资源对您或您的网站造成的任何形式的损失或伤害
4、未经本站允许,不得盗链、盗用本站资源;不得复制或仿造本网站,不得在非本站所属的服务器上建立镜像,本站对其自行开发的或和他人共同开发的所有内容、技术手段和服务拥有全部知识产权,任何人不得侵害或破坏,也不得擅自使用。
5、互联网的本质是自由与分享,我们真诚的希望,每一份有价值的正能量能够在互联网中自由传播,能够为每一个网站提供动力。

发表评论

还没有评论,快来说点什么吧~

联系客服
返回顶部