0

ユーザー登録とその詳細などを受け入れるデータベースをセットアップしています。phpを使用してデータベースをExcelファイルにエクスポートしようとしています。

私が抱えている問題は、一部の参加者がトルコ語などの外国語の文字を入力したことです。これはデータベースに「間違って」書き込まれています。作る。

データベースを Excel にエクスポートするコードを作成しましたが (以下)、データのエンコード方法に関係なく、Excel ドキュメントを正しく表示できません。

<?php 

require_once('../php/db.php');

header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=Download.xls");
header("Pragma: no-cache");
header("Expires: 0");

$query =    "SELECT * FROM users";

$result = mysqli_query($link, $query);
if($result) {
    $count = mysqli_num_rows($result);
    for($i=0; $i<$count; $i++) {
        $field = mysqli_fetch_field($result);
        $header .= $field->name."\t";
        while($row = mysqli_fetch_row($result)) {
            $line = '';
            foreach($row as $value) {
                if((!isset($value)) OR ($value == "")) {
                    $value = "\t";
                } else {
                    $value = str_replace('"', '""', $value);
                    $value = '"'.$value.'"'."\t";
                }
                $line .= $value;
            }
            $data .= trim($line)."\n";
        }
        $data = str_replace("\r", "", $data);
        if($data == "") {
            $data = "\n(0) Records Found!\n";
        }
    }
    print mb_convert_encoding("$header\n$data", 'UTF-16LE', 'UTF-8');
} else die(mysqli_error());
?>

これを行うと、Excel がファイルの種類を認識しないというエラーが表示されます。ドキュメントは開きますが、書き込もうとしたすべてのトルコ語文字の周りにボックスが表示されます。

私は PHP の専門家ではありません。これは、私がまとめた情報にすぎません。

誰か手を貸してくれませんか?

とても有難い

モズ

4

1 に答える 1

2
  1. まず、タブ区切りのテキスト ファイルを作成し、MIME タイプapplication/octet-streamとファイル拡張子を付けてブラウザに返しているようです.xls。Excelはタブ区切りでうまくいくかもしれませんが(しかし、エラーからはそうではないように聞こえます)、いずれにせよ、データが何であるかをすべてが正確に認識できるように、 text/tab-separated-valuesMIMEタイプとファイル拡張子を実際に使用する必要があります..txt

  2. 第二に、タブ区切りのファイルを作成するには、データを MySQL から ( を使用して) 直接エクスポートするのが非常に賢明SELECT ... INTO OUTFILEです。例えば:

    SELECT * FROM users INTO OUFILE '/tmp/users.txt' FIELDS TERMINATED BY '\t'
    

    次に、.xml を使用して、そのファイルの内容をブラウザに読み込むだけで済みますreadfile()

    どうしてもPHP 内から区切りファイルを作成する必要fputscsv()がある場合は、その関数の使用を検討してください (タブ区切り文字を使用するように指定することもできます)。

  3. 一部のバージョンの Excelでは、.txt拡張子を持つすべてのファイル.csv ..csvWindows-1252

  4. 文字エンコーディングに関する限り、データベースの内容を検査して、データが正しく保存されているかどうかを判断する必要があります。これを行う最善の方法はSELECT HEX(column) ...、基礎となるバイトを検査できるようにすることです。それが決定されUPDATEたら、変換が必要な場合は記録できます。

于 2012-05-17T14:56:24.373 に答える