相忘江湖

——凭栏听风雨,淡看江湖路

PHP中常用的Excel文件访问类及修改

        近日,由于手头项目需要解析web提交的excel文件,不得不看看这个在php中使用比较广泛的excel访问类了。之所以说它使用广泛,是后来在网上查找问题解决方法时才知道它的使用面的。

        首先说遇到的问题。问题是这样的:原函数中的处理方式是将多字节编码的内容全部转换为&#开头的十进制编码了,这样在web上显示时当然没问题,甚至可以说很好,因为不会出现乱码。但目前我面临的问题是要将excel文件中的数据解析,然后导入到数据库,主要用途也就是数据的批量处理,但导入到数据库后的数据需要在web方式下进行编辑之类的处理,当然不能让用户看到的是以&#开头的十进制编码内容了。如何将从excel文件中解析出来的数据转换为中文编码就是问题所在。注释掉原程序中的转换逻辑,返回在web页面上的是一组乱码,对照excel的16进制源文件,发现它们是一致的。由于以&#开头的十进制编码对应的数字就是该字符的unicode十进制编码,可知excel文件是以unicode编码存储的。知道其编码就好办了,在php中直接用iconv函数转换为目标编码即可:iconv('utf-16', 'gb2312', $str)。但测试用mbstring转换时出现了问题,直接用mb_convert_encoding($str, 'gb2312', 'utf-16')得到的仍然是乱码!问题在哪里?反复测试后,总算发现症结所在,未注意编码的“字节序”,再看excel源文件,其字节序采用的是little-endian,即低字节在前的“小尾”方式,将函数的参数改为:mb_convert_encoding($ret, 'gb2312', 'utf-16le'),问题就解决了!看来iconv函数有一个自动检测系统字节序的功能,而mbstring函数则需要明确地指定才行。

         现将修改后的代码和原代码及使用说明一并打包放到网上的,以下为链接:Excel处理

       ( 如若侵犯了程序原作者的版权,请作者与我联系,我将即时删除文件。此文另见PHP中常用的Excel文件访问类及修改)

阅读更多
个人分类: 技术文档
想对作者说点什么? 我来说一句

phpexcel操作类+实例

2010年01月28日 7.29MB 下载

没有更多推荐了,返回首页

不良信息举报

PHP中常用的Excel文件访问类及修改

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭