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

php中访问excel文件,PHP中常用的Excel文件访问类及修改 | 学步园相关推荐

  1. java 抽象工厂 类图_spring学习中常用到的工厂,抽象工厂学习 | 学步园

    工厂模式有简单工厂模式,工厂方法模式和抽象工厂模式几种形态.其中简单工厂模式和工厂方法模式已经在前面作过介绍.在这里,我们来介绍抽象工厂模式. 抽象工厂模式是所有形态的工厂模式中最为抽象和最具广泛性的 ...

  2. java printwriter用法_Java中printwriter类的用法 | 学步园

    printwriter类: java.io 类 PrintWriter java.lang.Object java.io.Writer java.io.PrintWriter 所有已实现的接口: Cl ...

  3. excel随机数_数据分析常用的excel函数(2)

    绝对引用与相对引用 先看一个例子:$L$3单元格输出的函数表达式,然后向右拉,excel默认是相对引用:所以最终$M$3:$S$3平均值都不一样.(具体看图清晰) 现在我的需求是:$L$3:$S$3所 ...

  4. java中protect是什么_Java中public、private、protecte、default、public void是什么意思 | 学步园...

    类的成员不写访问修饰时默认为default.默认对于同一个包中的其他类相当于公开(public),对于不是同一个包中的其他类相当于私有(private).受保护(protected)对子类相当于公开, ...

  5. java中jdbc查询有返回值_使用JdbcTemplate查询方法的返回值 | 学步园

    使用JdbcTemplate进行查询时,可以使用queryForXXX()等方法 1   jdbcTemplate.queryForInt() 和 jdbcTemplate.queryForLong( ...

  6. java中的pane,Java中scroll pane的使用(一)– 动态改变其client的大小 | 学步园

    动态改变scroll pane的client的大小,并达到其滚动条出现当client超出我们设定的view port大小时. package com.han; import java.awt.Bord ...

  7. c语言vi运行编译文件,VC++6.0中如何编译运行及调试C语言程序文件.docx

    VC++6. 0中如何编译运行调试C语言程序 1?启动VC++6. 0 (如下图) [5>R?*16 00 P"! tptl tub go□賦星糸理技件□中出融Fz " 口仍 ...

  8. 鸟哥Linux私房菜基础学习篇 第二部分 Linux 文件、目录与磁盘格式_Linux文件权限与 目录配置_Linux文件与目录管理...

    2019独角兽企业重金招聘Python工程师标准>>> 1.相对路径相对某目录比较灵活方便(如安软件时候指定目录),绝对路径一般不会因为环境变化而产生错误. 2.目录变化时的切换 - ...

  9. linux中常用的头文件

    #include <linux/***.h> 是在linux-2.6.29/include/linux下面寻找源文件. #include <asm/***.h> 是在linux ...

最新文章

  1. Linux下的阻塞(Block)
  2. 移动互联网漫谈(3)
  3. 一文梳理缺陷检测方法
  4. 别扭翻译之decentralization
  5. 实践自定义UI—RLF...(RelativeLayout LinearLayout FrameLayout....)
  6. 全球及中国碳纤维风电叶片市场投资分析与运营潜力预测报告2021-2027年
  7. JVM_06 垃圾回收相关概念[ 二 ]
  8. android下拉会谈效果,Android实现下拉展示条目效果
  9. 汇编-输出寄存器的值-输出值
  10. 脂肪粒是否可以针刺入
  11. java wsdl xfire_java调用wsdl xfire和cxf两种方式
  12. 图解面试题:找出数组中重复的数字?
  13. BarTender怎么打印公式化的三列标签
  14. Eclipse中 *.properties 文件编码设置
  15. 资源管理器和计算机的功能基本相同吗,“资源管理器”和“计算机”的功能基本相同...
  16. 单片机应用系统设计技术——单片机出租车计费器
  17. 条形码怎么看?一文带你认识!
  18. Hulu斩获两枚艾美奖提名!(附第68届艾美奖重要奖项提名名单)
  19. ldo和dcdc功耗_电路设计中LDO与DC/DC的选择问题(LDO篇)
  20. SCAU 1028 求素数

热门文章

  1. 随机验证码的生成(手机或者邮箱验证码)
  2. vite打包工具的介绍
  3. 利用Canvas在浏览器上绘制复杂图形,比如:绘制一件衣服,绘制一条围巾,现阶段研究成果
  4. ant design vue 组件 Tree
  5. 你今天Git了吗?上传资源上Github最新教程!
  6. 微信小程序使用swiper制作轮播图留白的解决方法
  7. win10专业版2020下载链接
  8. 一个形式良好的XML文档
  9. 数据库范式讲解(1NF、2NF、3NF、BCNF)
  10. Redis学习之旅--Redis的数据类型你都知道吗?