首页 新闻 会员 周边

[PHP] Excel的数据导入到MYSQL的时候乱码,怎么破?

0
悬赏园豆:200 [已解决问题] 解决于 2015-06-05 09:47

1、用phpexcel读取excel的数据,显示在网页的同时存入数据库;

读取数据,添加MYSQL:

include('conn.php');
require_once 'PHPExcel.php';
require_once 'PHPExcel/IOFactory.php';
$reader = PHPExcel_IOFactory::createReader('Excel5');
//$reader = PHPExcel_IOFactory::createReader('Excel2007'); // 查\Classes\PHPExcel\Reader
//$resource = 'upload/201405-cda.xlsx';
$resource = 'upload/201405-cda.xls';
if (!file_exists($resource)) {
  exit("$resource is not exists.\n");
}

$PHPExcel = $reader->load($resource); // 文件名称
$sheet = $PHPExcel->getSheet(0); // 读取第一个工作表从0读起
$highestRow = $sheet->getHighestRow(); // 取得总行数
$highestColumn = $sheet->getHighestColumn(); // 取得总列数,不过是最大列的字母
$highestColumn = PHPExcel_Cell::columnIndexFromString($highestColumn); // 转换字母为对应的统计数字;
// getCellByColumnAndRow(0,1),第一列为0,第一行为1;
echo $highestRow . "、" . $highestColumn . "、" . $sheet->getCellByColumnAndRow(0, 1)->getCalculatedValue() . "(数量统计结束,换行)<br />";
// 每次读取一行,再在行中循环每列的数值
$excelArray = array();
for ($row = 1; $row <= $highestRow; $row++) {
    $val = $sheet->getCellByColumnAndRow(0, $row)->getCalculatedValue();
    if ($val == "") return;

    for ($column = 0; $column < $highestColumn; $column++) {
        
        $isDate = 0;
        $isDate = PHPExcel_Shared_Date::isDateTime($sheet->getCellByColumnAndRow($column, $row));
        if ($isDate > 0)
        {
            $val = PHPExcel_Shared_Date::ExcelToPHPObject($sheet->getCellByColumnAndRow($column, $row)->getCalculatedValue())->format('Y/m/d');
        }else {
            $val = $sheet->getCellByColumnAndRow($column, $row)->getCalculatedValue();
        }
        $excelArray[$row][] = $val;
        echo "<strong>" . $column . ")" . $val . "</strong>";
        echo "<br />";
    }
    echo "<br />已读完第<strong>" . $row . "</strong>行数据:" . $excelArray[$row][3] . "<hr>";
    //在这儿使用SQL语句,取$excelArray[$row][3]、$excelArray[$row][4]、$excelArray[$row][5]存入数据库对应字段
    $tmpDepartment = $excelArray[$row][1];
    $tmpName = $excelArray[$row][2];
    $sql="insert into mywage (fdepartment,fname) values ('$tmpDepartment','$tmpName')";
    //mysql_query("set names 'UTF-8'");
    if (@mysql_query($sql))
    {
        echo "添加数据记录:" . $excelArray[$row][2] . "成功";
    }else {
        echo "tmpName - > ". $tmpName;
        echo "失败";
    }
}

问题是:在MYSQL后台管理查看到的中文数据全是乱码,我自己的php文件是UTF-8编码,MYSQL数据库表、字段的整理是:utf8_unicode_ci,这个该怎么解决,才能在PHPMYADMIN后台看见正常显示的中文数据?

主要是心里不踏实,因为内容能正常查询和条件判断,但是毕竟布署在生产环境 ,担心出问题。

远方的客人的主页 远方的客人 | 初学一级 | 园豆:22
提问于:2015-06-05 09:27
< >
分享
最佳答案
0

统一三码:

1、php文件使用UTF-8编码。

2、header("Content-Type:text/html;charset=utf-8");

     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

3、mysql字符集使用utf8,程序增删查改前都需要set names 'UTF-8',建议写在db类的构造函数里面。

 

针对LZ从EXCEL导入的出现乱码问题,还需要加一条:

含有中文字符的单元格的值需要转换编码,$s = iconv('GBK', 'UTF-8', $s);

iconv比mb_convert_encoding效率高,一般情况下用前者就够了。

 

以上回答为借鉴部分

收获园豆:200
请叫我头头哥 | 大侠五级 |园豆:9382 | 2015-06-05 09:47

以上回答为借鉴部分,借鉴来源:http://q.cnblogs.com/q/62227/

答案作者:斯诺登。

小伍2013 | 园豆:1291 (小虾三级) | 2015-06-06 14:44
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册