PHPExcel读取.xls文件编码异常:如何转为UTF-8读取?
解决PHPExcel读取.xls文件字符乱码问题
嘿,我之前也踩过PHPExcel读取.xls文件字符不对的坑,结合你的问题和实际经验,给你几个靠谱的解决思路:
方法一:先将文件转换为UTF-8编码
毕竟PHPExcel对UTF-8编码的文件支持最好,你可以试试这两种转换方式:
- 用Office软件手动转换:打开你的.xls文件,点击「另存为」,保存类型选择「CSV(逗号分隔)(*.csv)」,在弹出的编码选项里选「UTF-8」。之后你可以直接读取这个CSV文件,或者再把CSV转成xls格式使用。
- 用命令行工具批量转换:如果是服务器上的文件,用
iconv命令就行,比如原文件是GBK编码的话:
注意:如果不确定原文件编码,可以用iconv -f GBK -t UTF-8 source.xls > target_utf8.xlsfile -i source.xls命令先检测一下。
方法二:在PHPExcel读取时强制处理编码
如果不想转换原文件,也可以在读取后对单元格内容做编码转换:
- 单个单元格处理示例:
require_once 'Classes/PHPExcel.php'; include 'Classes/PHPExcel/IOFactory.php'; $pathgalleriadeclare = '你的文件路径.xls'; $objReader = PHPExcel_IOFactory::createReader('Excel5'); // 针对.xls格式 $objPHPExcel = $objReader->load($pathgalleriadeclare); $sheet = $objPHPExcel->getActiveSheet(); // 读取A1单元格并转换编码 $cellValue = $sheet->getCell('A1')->getValue(); // 把原编码(比如GBK)转成UTF-8,根据实际情况调整原编码参数 $cellValue = mb_convert_encoding($cellValue, 'UTF-8', 'GBK'); echo $cellValue; - 全局设置文档编码:初始化PHPExcel时可以指定编码,避免默认编码问题:
$objPHPExcel = new PHPExcel(); $objPHPExcel->getProperties()->setEncoding('UTF-8');
方法三:处理含HTML内容的单元格
如果是因为单元格里有HTML内容导致识别异常,可以先过滤标签再处理编码:
$cellValue = $sheet->getCell('A1')->getValue(); // 先去掉HTML标签 $cellValue = strip_tags($cellValue); // 再转换编码 $cellValue = mb_convert_encoding($cellValue, 'UTF-8', 'GBK');
要是需要保留HTML结构,记得确保HTML本身是UTF-8编码的,这样PHPExcel读取后才不会乱码。
内容的提问来源于stack exchange,提问作者Virgil Cruz
相关产品推荐
相关产品推荐

