PHPはデータベースMysqlからデータを読み出してexcelを生成する(文字化けし問題を解決し、中国語変疑問符問題を解決する)

8044 ワード

phpで直接excelをエクスポートすると文字化けしたり、中国語が疑問符になったりすることがありますが、この場合は符号化の問題に違いありません.
前後
前後
環境
MySQL 5.0データベースutf 8_general_ci符号化
PHP UTF 8の符号化に注意すべき問題1.データベースから読み込まれたデータは文字化けしていますか?
mysql_query( "SET NAMES 'utf8'"); // 
2. 出力がxlsファイルの場合、xls符号化フォーマットの多くはgbk or gb 2312であるため、多く読み出すデータベースのデータには中国語のトランスコードがある
$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
"); } $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("
" ); //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

"); } //define separator (defines columns in excel & tabs in word) $sep = "
"; //new line character while($row = mysql_fetch_row($result)) { //set_time_limit(60); // HaRa $schema_insert = ""; for($j=0; $j