PHPはデータベースMysqlからデータを読み出してexcelを生成する(文字化けし問題を解決し、中国語変疑問符問題を解決する)
8044 ワード
phpで直接excelをエクスポートすると文字化けしたり、中国語が疑問符になったりすることがありますが、この場合は符号化の問題に違いありません.
前後
前後
環境
MySQL 5.0データベースutf 8_general_ci符号化
PHP UTF 8の符号化に注意すべき問題1.データベースから読み込まれたデータは文字化けしていますか?
PHPエクスポートexcel or wordソース:http://fundisom.com/phparadise/php/databases/mySQL_to_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