PHP 从数据库Mysql中读取数据生成excel(解决乱码问题,解决中文变问号问题)

有时候直接用php导出excel会有乱码或者中文变成问号出现,这时候肯定就是编码的问题了。

 前     后  


前  后 


环境

MySQL 5.0 数据库 utf8_general_ci 编码

PHP UTF8 编码

需要注意的问题
1. 从数据库读取出来的数据是否乱码?
mysql_query( "SET NAMES 'utf8'"); //定义好如何和数据库连接的编码
2. 输出为 xls 文件时候,xls 编码格式大多为 gbk or gb2312,因而要多读取的数据库中的数据有中文的要转码
$filename = mb_convert_encoding($filename, "gb2312" , "utf-8" ); 由utf8转为gb2312



                  
                 
$DB_Server = "localhost";            //your MySQL Server
                  $DB_Username = "lukeyan";                        //your MySQL User Name
                  $DB_Password = "123";                      //your MySQL Password
                  $DB_DBName = "";                      //your MySQL Database Name
                  $DB_TBLName = "";                     //your MySQL Table Name
                  $sql = "Select * from $DB_TBLName limit 0,10" ;
                  
                   //create MySQL connection
                  $Connect = @mysql_connect( $DB_Server, $DB_Username, $DB_Password)
                  or die("Couldn't connect to MySQL:
" . mysql_error() . "
" . mysql_errno()); //select database $Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:
" . mysql_error(). "
" . mysql_errno()); //execute query mysql_query( "SET NAMES 'utf8'"); //定义好如何和数据库连接的编码 $result = @mysql_query($sql,$Connect) or die("Couldn't execute query:
" . mysql_error(). "
" . mysql_errno()); $Use_Title = 1; $now_date = date( 'm-d-Y H:i'); $title = "Dump For Table on $now_date" ; $file_type = "vnd.ms-excel"; $file_ending = "xls"; header( "Content-Type: application/$file_type" ); header( "Content-Disposition: attachment; filename=database_dump.$file_ending"); header( "Pragma: no-cache"); header( "Expires: 0"); if ($Use_Title == 1) { echo(" $title\n"); } $sep = "\t"; $tablename = "编码abc"; $tablename = mb_convert_encoding($tablename, "gb2312", "utf-8" ); for ($i = 0; $i < mysql_num_fields($result); $i++) { echo $tablename. "\t" ; } print("\n" ); //end of printing column names //start while loop to get data while($row = mysql_fetch_row($result)) { $schema_insert = ""; for($j=0; $j








PHP导出excel or word 源码:http://fundisom.com/phparadise/php/databases/mySQL_to_excel




" . mysql_error() . "
" . mysql_errno()); //select database $Db = @mysql_select_db($DB_DBName, $Connect) or die("Couldn't select database:
" . mysql_error(). "
" . mysql_errno()); //execute query $result = @mysql_query($sql,$Connect) or die("Couldn't execute query:
" . mysql_error(). "
" . mysql_errno()); //if this parameter is included ($w=1), file returned will be in word format ('.doc') //if parameter is not included, file returned will be in excel format ('.xls') if (isset($w) && ($w==1)) { $file_type = "msword"; $file_ending = "doc"; }else { $file_type = "vnd.ms-excel"; $file_ending = "xls"; } //header info for browser: determines file type ('.doc' or '.xls') header("Content-Type: application/$file_type"); header("Content-Disposition: attachment; filename=database_dump.$file_ending"); header("Pragma: no-cache"); header("Expires: 0"); /* Start of Formatting for Word or Excel */ if (isset($w) && ($w==1)) //check for $w again { /* FORMATTING FOR WORD DOCUMENTS ('.doc') */ //create title with timestamp: if ($Use_Title == 1) { echo("$title\n\n"); } //define separator (defines columns in excel & tabs in word) $sep = "\n"; //new line character while($row = mysql_fetch_row($result)) { //set_time_limit(60); // HaRa $schema_insert = ""; for($j=0; $j



你可能感兴趣的:(php)