PHP导入文件的转码问题

今天在公司的做的后天项目出现点问题,本以为全开发完了,但是在联调的过程中我发现了很严重的问题,这个问题困扰了我好久,后来才知道原因,归根结底就是经验不足,以前做过,踩过坑就好了。

我导出的文件是csv格式的,有的同学就会问为什么不是excel格式的,emmmm,我的导师跟我说csv文件比较小,而且是以逗号分隔的,用记事本就可以打开,比较好处理。我做的后台也需要导入功能,导入的也是csv文件,如果要导入execl文件的话会很麻烦,需要用到一个插件,而且excel处理速度比加慢,幸好我们的库里有封装好的。我的bug出现在导出文件如果不许改可以正常导入,但是一经修改再次导入的话就会出现乱码,后来才发现是Excel或wps自动把文件转码了,转成了GBK码,而我需要的是UTF-8的,这时就需要先把接收的文件转码了。

常见的转码方式:

1.iconv — 字符串按要求的字符编码来转换 
iconv有bug ,碰到一些生僻字就会无法转换,当然了配置第二个参数时,可以稍微弥补一下默认缺陷,不至于无法转换是截断,用法如下 
iconv(“UTF-8″,”GB2312//IGNORE”,$data) ; 

2.mb_convert_encoding详解: 
为了确保转换的成功率,我们可以用另一个转换函数 
mb_convert_encoding,这个函数效率不是很高,另外这个函数还可以省略第三个参数,自动识别内容编码,不过最好不要用,影响效率,还需要注意的时,mb_convert_encoding和iconv参数顺序不一样,一定要注意。$outstr = mb_convert_encoding($instr,'UTF-8','GBK');   

3.mb_detect_encoding详解:

mb_detect_encoding — 检测字符的编码

4.将任意码转换成utf

1 private function characet($data){
2         if( !empty($data) ){
3             $fileType = mb_detect_encoding($data , array('UTF-8','GBK','LATIN1','BIG5','ASCII','GB2312')) ;
4             if( $fileType != 'UTF-8'){
5                 $data = mb_convert_encoding($data ,'utf-8' , $fileType);
6             }
7         }
8         return $data;
9     }

注意:一定要在用字符串分割函数之前就行转码。

我还遇到时间格式的问题,同样是csv和excel的坑,导出的时间格式是1978-12-23 08:08:08 ,但是给我转码成了1978/12/23 8:08:08 ,这问题的解决办法就是把前端给的参数用函数strtotime转换成时间戳,再用date函数转换成想要的格式就好了,很坑吧。。。。。

今天很烦。。。。。。

 

转载于:https://www.cnblogs.com/yjb333/p/9339110.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值