本人用的是网络上现成的类文件excel_class.php,然后读取book.xls文件,可是问题就来了,再浏览器上可以正常显示excel表格字段---“张龙”,可插入数据库就不行了,变成乱码“&#29579&#32418&#33395”
<?php
require "excel_class.php";
Read_Excel_File("book.xls",$return);
echo $name= $return[Sheet1][1][1];//再浏览器上正常显示中文名字张龙(excel表格字段)
$conn = @ mysql_connect("localhost", "root", "") or die("数据库链接错误");
mysql_select_db("chongzhi", $conn); 
mysql_query("set names 'GBK'"); 
mysql_query("INSERT INTO `table` (`name`) VALUES ('$name');");//再mysql库里面变成"&#29579&#32418&#33395",怎么解决乱码
?>其中execl表:姓名
             张龙
             赵虎

解决方案 »

  1.   

    excel_class.php文件代码,由于太长,所以直接链接发一个给高手们http://www.tzlink.com/info/show.php?aid=3443
      

  2.   

    虽然浏览器上看到的是张龙。
    不过刚刚查了一下浏览器的源代码,就是右键--查看源文件,发现也是乱码
    <body>
    &#29579&#32418&#33395
    </body>//浏览器看正常,源文件不正常,怎么解决到底是什么原因,是不是excel那边需要什么编码的
      

  3.   

    &#29579&#32418&#33395
    这3个对应的中文“王红艳"
    显示的话直接用PHP显示就可以了echo "&#29579&#32418&#33395";
      

  4.   

    编码是个很基础的问题,也是大家很容易忽略的问题,写代码之前多多考虑,以后会少很多麻烦。需要注意的是,从Excel里面读取出来的属于UTF-16LE编码,因为通常都是支持UTF-8编码,其中就涉及到编码的转换。
    例如这里使用
    echo $name= $return[Sheet1][1][1];
    来显示第2行第2列里面的内容,原本内容应该是“王红艳”,使用PHP在web上显示的时候也确实是“王红艳”,但是查看网页的源代码是&#29579&#32418&#33395
    其中&#是为了在网页上显示,29579,32418和33395的十六进制表示则是“王红艳”的UTF-16LE编码。
    那么我们需要做的就是将这个UTF-16LE编码转换为UTF-8编码。首先打开excel_class.php,找到函数uc2html,然后把function uc2html($str) {
    $ret = '';
    for( $i=0; $i<strlen($str)/2; $i++ ) {
    $charcode = ord($str[$i*2])+256*ord($str[$i*2+1]);
    $ret .= '&#'.$charcode;
    }return $ret;
    }编码改成function uc2html($str) {
    return mb_convert_encoding($str, 'GBK', 'UTF-16LE');}