关闭

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

3228人阅读 评论(0) 收藏 举报

        近日,由于手头项目需要解析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文件访问类及修改)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:18698次
    • 积分:315
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:0篇
    • 译文:0篇
    • 评论:19条
    文章分类
    最新评论