PHPExcel读取Excel内容时出现原表不存在的特殊字符â该如何处理
问题解决方案
这个问题是字符编码处理逻辑错误和PHP原生函数不支持多字节字符共同导致的,可按以下步骤修复:
根本原因
- 原生
strtolower()仅支持ASCII字符处理,遇到UTF-8编码的多字节字符时会强制按单字节解析,直接生成乱码 - Excel中姓名间的空格大概率是不间断空格(Unicode U+00A0),普通
trim()无法识别删除 - 未指定PHPExcel读取编码时,部分旧版.xls文件会默认用ISO-8859-1编码解析,和UTF-8输出冲突导致乱码
修复步骤
1. 配置PHPExcel读取编码
加载Excel文件前先设置编码适配,代码如下:
// 初始化读取器 $reader = PHPExcel_IOFactory::createReaderForFile('你的Excel文件路径'); // 指定输入编码为UTF-8,避免读取时编码转换错误 $reader->setInputEncoding('UTF-8'); $objPHPExcel = $reader->load('你的Excel文件路径'); $sheet = $objPHPExcel->getActiveSheet();
2. 修改单元格内容处理代码
替换原有的单字节处理函数为多字节兼容函数,代码如下:
// 读取原始单元格内容 $rawValue = $sheet->getCell('B' . $rowNum)->getValue(); // 替换不间断空格为普通空格后去除首尾空白 $trimmedValue = trim(str_replace("\xc2\xa0", " ", $rawValue)); // 使用多字节转小写函数,指定UTF-8编码避免乱码 $finalValue = mb_strtolower($trimmedValue, 'UTF-8');
内容的提问来源于stack exchange,提问作者Menna Nasser
相关产品推荐
相关产品推荐

