簡體   English   中英

使用php將MySQL表導出到excel。 編碼問題

[英]Export MySQL table using php into excel. Problems with encoding

我嘗試將MySQL表之一導出到excel文件中,但波蘭字母未正確顯示它顯示:Bre¶ć,Białoru¶但應:Brześć,Białoruś

如何解決此代碼? 沒有顯示波蘭字母真的很煩。 哪里可能有問題?

<?php

 $DB_Server = "localhost";      //your MySQL Server 
$DB_Username = "******";                 //your MySQL User Name 
$DB_Password = "*****";             //your MySQL Password 
$DB_DBName = "*******";             //your MySQL Database Name 
$DB_TBLName = "********";               //your MySQL Table Name  

 $filename = "excelfilename";         //File Name

 //create MySQL connection
 $sql = "Select * from $DB_TBLName";
 $Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password)
 or die("Couldn't connect to MySQL:<br>" . mysql_error() . "<br>" . mysql_errno());
 //select database
 $Db = @mysql_select_db($DB_DBName, $Connect)
 or die("Couldn't select database:<br>" . mysql_error(). "<br>" . mysql_errno());
 //execute query
 $result = @mysql_query($sql,$Connect)
 or die("Couldn't execute query:<br>" . mysql_error(). "<br>" . mysql_errno());
 $file_ending = "xls";

//header info for browser
 header("Content-Type: application/xls");
 header("Content-Disposition: attachment; filename=$filename.xls");
 header("Pragma: no-cache");
 header("Expires: 0");

/*******Start of Formatting for Excel*******/
 //define separator (defines columns in excel & tabs in word)
 $sep = "\t"; //tabbed character

//start of printing column names as names of MySQL fields
 for ($i = 0; $i < mysql_num_fields($result); $i++) {
 echo mysql_field_name($result,$i) . "\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<mysql_num_fields($result);$j++)
 {
 if(!isset($row[$j]))
 $schema_insert .= "NULL".$sep;
 elseif ($row[$j] != "")
 $schema_insert .= "$row[$j]".$sep;
 else
 $schema_insert .= "".$sep;
 }
 $schema_insert = str_replace($sep."$", "", $schema_insert);
 $schema_insert = preg_replace("/\r\n|\n\r|\n|\r/", " ", $schema_insert);
 $schema_insert .= "\t";
 print(trim($schema_insert));
 print "\n";
 }
 ?>

您必須編寫什么是數據庫的字符集。 如果是UTF8,則在建立連接后嘗試執行查詢“ SET NAMES utf8”;

並且請確保您頁面的編碼是UTF8。 您可以在Notepad ++實用程序中檢查編碼

問題是您的輸出是在ISO-8859-2但是excel希望Windows-1250字符很少能與Windows-1252兼容。

您可以將輸出轉換為Windows-1250

echo mb_convert_encoding($str, 'Windows-1250', 'ISO-8859-2');

或轉換為utf8:

在標頭和第一件事后添加utf8 BOM作為文件內容:

echo "\xEF\xBB\xBF";

並將數據轉換為utf8

echo mb_convert_encoding($str, 'UTF-8', 'ISO-8859-2');

如果您有不支持utf8的舊版excel,那么您會很不幸。


默認情況下,excel假定Windows的默認區域設置對於來自不同位置的人而言是不同的,即,在美國的人可能會看到您的文本為“Brze¶æ,Bia³oru¶”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM