phpはexcelテーブルと符号化の問題にデータをダウンロードします

4979 ワード

ネットワークから転送
PHPがExcelファイルをエクスポートする際の主な手順は2つあります.
1、定義ファイル名
2、Excelデータの入力
この2つの過程でいくつかのPHPがExcelの文字化けしをエクスポートする問題が発生する可能性があります.次に、解決方法を説明します.
ファイル名のPHPエクスポートExcel文字化けしを解決する:
文字化けしの原因:お客様が使用する中国語版Windowsシステムプラットフォームであり、Windowsプラットフォームのファイル名はgb 2312(gbk)と符号化されているが、私たちのウェブコードは現存する潮流に従うためにutf-8(国際化)符号化が一般的である.この場合、私たち:header(「Content-Disposition:inline;filename=".$filename.」.xls")では文字化けしてしまいますが、もしあなたのページの符号化がgb 2312であれば、符号化の問題を考慮する必要はありません.
解決策:$filenameをトランスコードし、実行:iconv('utf-8","gb 2312",$filename)を実行します.iconv関数をサポートしていない場合は、$filenameの符号化をgbkに変換できればいいです.
しかし、このような問題がまた発生し、linuxユーザーはファイル名の文字化けしてしまいます(linuxプラットフォームのファイル名はgbk符号化ではないため).
この問題を考慮して、私は2つの方法を採用します:第1:一部の取引先を放棄して、結局windowsシステムのユーザーは大部分を占めています.第二:gmailのように、2つのダウンロードアドレスを提供します.1つのファイル名gbk符号化、1つのファイル名utf-8符号化.
Excel内データのPHPエクスポートExcel文字化けしを解決する:
PHPがExcelをエクスポートして文字化けした原因:ページコードとExcelコードが一致しない.
解決策:コードが一致しない以上、一致させておけばOKです.Excelの文字セットを定義する:header(「Content-Type:application/vnd.ms-excel;charset=UTF-8」)を見て、charset=UTF-8を見て、あなたのホームページの符号化と一致させてExcel内のデータの文字化の問題を解決することができて、これは比較的に簡単です!
簡単なテストで使用可能
1つ目の方法:

<?php
$DB_Server = "localhost"; 
$DB_Username = "username"; //   
$DB_Password = "password"; //    
$DB_DBName = "dbname"; //    
$DB_TBLName = "tablename"; //  
$Connect = @mysql_connect($DB_Server, $DB_Username, $DB_Password) or die("Couldn't connect."); 
mysql_query('set names utf8'); //              
$sql = "Select * from $DB_TBLName"; 
$ALT_Db = @mysql_select_db($DB_DBName, $Connect)or die("Couldn't select database"); 
$result = @mysql_query($sql,$Connect) or die(mysql_error()); 

$now_date = date('Y-m-d H:i');
$file_type = "vnd.ms-excel";
$file_ending = "xls";
header("Content-Type: application/$file_type");
header("Content-Disposition: attachment; filename=$now_date.$file_ending");
header("Pragma: no-cache");
header("Expires: 0");

$now_date = date('Y-m-d H:i');
$title = "    :$DB_DBName,   :$DB_TBLName,    :$now_date";
echo("$title
"); $sep = "\t"; for ($i = 0; $i < mysql_num_fields($result); $i++) { echo mysql_field_name($result,$i) . "\t"; // } print("
"); $i = 0; 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 .= "\t"; print(trim($schema_insert)); print "
"; $i++; } return (true); ?>

2つ目の方法:


function down_list() {
		if (!isset($_COOKIE['sys'])) {
			header("Location: admin.php");
		}
	    $user = new user();
	    $db = new mysql_db();
	    $userinfos = $user->query_users_sum($db);
	    header("Content-type:application/vnd.ms-excel; charset=UTF-8"); //                   
            header("Content-Disposition:filename=" . time() . ".xls");
            $result =" <table width='100%' height='21'  border='0' align='center'>";
            $result.=" <tr  align='center' style='border:1'>
                    <td>id</td>
                    <td>  </td>
                    <td>  </td>
		    <td>QQ</td>
                    <td>    </td>
                </tr>";
            foreach ($userinfos as $value) {
                $result.="<tr>";
                $result.="<td>" . $value['id'] . "</td>";
                $result.="<td>" . $value['name'] . "</td>";
                $result.="<td>" . DES1::decrypt($this->key, $value['iphone']) . "</td>";
				$result.="<td>" . $value['qq'] . "</td>";
                $result.="<td>" . $value["creat_date"] . "</td>";
                $result.="</tr>";
            }
            $result.="</table>";
            echo $result;
            exit;
	}