我们之前都是使用PHPexcel导出我们的一些数据的,由于Phpexcel对导出超出1万条数据会导至超时和内存暴涨,后来我们就改用数据导出成csv格式的。

相信很多朋友们在用PHP导出csv文件时都遇到各种乱码问题。网上搜了一堆都是用加BOM的方式来解决,这个方法我试了好多次在我们的测试和生产环境下都不管用,不知道是为什么。

  后来使用iconv方法将导出的内容转码由utf-8转为gb2312,奇迹终于出来了,可以正常显示了,不过经同事发现,我们导出400多条数据里竟然少了几十条数据(我是一条一条转码然后拼接出出的csv字符串)。于是到度娘上找iconv转码失败的问题,发现iconv原来是有BUG的,对于某些中文字转不了,转不了还不能跳过然后返回空值,是这个原因导致少了几十条数据,同时给出了用mb_convert_encoding 这个方法来转换。于是稍作修改就改成了用mb_convert_encoding方法了,在本地机测试非常正常,代码如下:

$str = mb_convert_encoding($str,'gb2312');

  

但发布到线上导出数据还是一堆乱码,但与之前不作转码时的乱码还不一样,说明mb_convert_encoding方法是起作用的。查了一下mb_convert_encoding方法有三个参数$from_encoding,第三个参数是可选参数,网上大多数的示例都是不使用第三个参数的,第三个参数默认也是null值。于是我把它用起来改成

$str = mb_convert_encoding($str,'gb2312','utf-8');

 

在本地开发机上测试是正常的,发布到生产环境,吼吼,一切正常了。

这究竟是为什么? 真没时间去深究了,有知道的同学请告诉我一下吧

解决PHP下导出csv乱码小记的更多相关文章

  1. 解决mysql导入导出数据乱码问题

    最近在linux上面用mysqldump导出数据,放在windows系统中导入就会出现中文乱码,然后就会导致出现: Unknown MySQL server host和Can't connect to ...

  2. 解决windows下vim中文乱码

    解决windows下vim中文乱码 windows安装了vim8,也就是gvim后,打开带有中文的文档,显示中文是乱码. 毕竟有许多文档我是用utf-8编码的,所以解决的办法是设置一下编码为utf-8 ...

  3. MySQL导出csv乱码问题的解决

    csv乱码问题的解决      从MySQL导出数据到 csv 文件后,有时会发现用 excel 打开该导出 csv 文件显示的是乱码.这个问题是 csv 文件本身的文本编码问题导致的,解决办法: 1 ...

  4. 导出CSV乱码

    导出CSV,无论是什么格式,excel打卡都是乱码 需要加上 echo "\xEF\xBB\xBF"; header("Content-Disposition:attac ...

  5. mysql数据库导出CSV乱码问题

    一.导出汉字为乱码 1. 鼠标右键点击选中的 csv 文件,在弹出的菜单中选择“编辑”,则系统会用文本方 式(记事本)打开该 csv 文件: 2. 打开 csv 文件后,进行“另存为”操作,在弹出的界 ...

  6. 解决Linux下sqlplus中文乱码问题

    错误现象:在windows下用其他工具访问oracle,确认中文正常显示.在Linux下使用sqlplus查询数据表中文内容出现乱码. 分析及解决:因为windows下正常,所以问题应出现在Linux ...

  7. 解决linux下导入数据库乱码问题

    引言:在windows下的mysql数据库导出SQL文件,在Linux下导入后显示为乱码. 1.启动Mysql服务及创建数据库(下面uushop为我将创建的数据库名) service mysqld s ...

  8. 解决Linux下Oracle中文乱码的一些心得体会 ,转自

    以下转自 http://blog.itpub.net/29151695/viewspace-1173238/ 最近在linux上安装完oracle 10gR2后,又遇到了字符集乱码的问题,之前在网上找 ...

  9. 解决mac下sublime中文乱码

    Mac OS X 属于 Apple 独家演绎的 Unix 分支版本,默认使用 UTF-8 编码,当使用不同开发平台的小伙伴们,共同维护一份代码的时候,尤其现在很多人都还在用 Windows 系统的时候 ...

随机推荐

  1. TCP粘包/拆包问题

    无论是服务端还是客户端,当我们读取或者发送消息的时候,都需要考虑TCP底层的粘包/拆包机制. TCP粘包/拆包 TCP是个"流"协议,所谓流,就是没有界限的一串数据.大家可以想想河 ...

  2. Java基础语法的学习

    首先就是关于枚举类型的思考与实践,这个是在jdk5.0及以后的版本才有的,然后对枚举类型进行动手操作. 源代码: package test; public class EnumTest { publi ...

  3. Hibernate,一对一外键单向 记录。Timestamp 的一个坑。

    首先是2张表 表A: 表B: 其中表B中的FormBaseId对应表A中的SubjectID. 数据库中没有设置外键关系. 下面是2个对应的实体 package questionnaire.model ...

  4. 运用datalist标签实现用户的搜索列表

    datalist是一个很强大的HTML5标签,支持一般类似于模糊查询,以前都是需要js来做的.下面是一个datalist配合js的小例子,主要是实现用户是否存在,以及添加过程中是否重复的判断. 首先是 ...

  5. JS(event事件)

    常用的event事件: 属性 此事件发生在何时... onabort 图像的加载被中断. onblur 元素失去焦点. onchange 域的内容被改变. onclick 当用户点击某个对象时调用的事 ...

  6. BestCoder Round #68 (div.2)

    并查集 1002 tree 题意:中文题面 分析:(官方题解)把每条边权是1的边断开,发现每个点离他最近的点个数就是他所在的连通块大小. 开一个并查集,每次读到边权是0的边就合并.最后Ansi=siz ...

  7. Python学习笔记10

      1.函数式编程   理论就来自lambda演算,虽然没有学过lisp,一直被其大名震撼. 特性: 函数是以一等公民 可以作为参数 可以作为返回值 具有闭包特性   1.1参数传递方式 一般参数传递 ...

  8. CF# Educational Codeforces Round 3 B. The Best Gift

    B. The Best Gift time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  9. BZOJ2706 : [SDOI2012]棋盘覆盖

    A类数据: 将棋盘黑白染色,相邻的点之间连边,求出二分图最大匹配即可. B类数据: 答案为$\lfloor\frac{n^2-1}{3}\rfloor$,用FFT加速计算即可,时间复杂度$O(L\lo ...

  10. 数据仓库原理<2>:数据仓库系统的体系结构

    1. 引言 本篇主要讲述数据仓库系统的体系结构与组成要素.数据集市与数据仓库之间的关系.元数据的定义与作用. 在上一篇,笔者介绍了数据仓库的定义: "数据仓库是一个面向主题的.集成的.不可更 ...