2

Web システムに CSV エクスポートがあり、これをクライアントからクエリしようとしています。問題は一度もありませんでしたが、何らかの理由で、クライアントの 1 つで、返されたデータの本体の直前に余分な 4 文字が含まれており、どこから来たのかを理解できません!

HTTP/1.1 200 OK
Date: Mon, 17 Jun 2013 09:17:22 GMT
Server: Apache/2.2
Set-Cookie: username=xxx expires=Mon, 17-Jun-2013 11:17:22 GMT; path=/
Set-Cookie: password=xxx; expires=Mon, 17-Jun-2013 11:17:22 GMT; path=/
Content-Disposition: attachment; filename="xxx-Stock.csv"
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Transfer-Encoding: chunked
Content-Type: text/csv

20b1
"code","dsc","cat","sub","whqc","qty"
..................

上記では、20b1 が私の体の前に進んでいます。同じ方法でファイルを手動でダウンロードしましたが、ファイルに表示されません。

The export code looks like:
header("Content-Disposition: attachment; filename=\"" . $file . "\"");
header("Content-type: text/csv");
$tmp["header"] = "\"code\",";
$tmp["header"].= "\"dsc\",";
$tmp["header"].= "\"cat\",";
$tmp["header"].= "\"sub\",";
$tmp["header"].= "\"whqc\",";
$tmp["header"].= "\"qty\"\n";
echo $tmp["header"];

for ($i = 1; $i <= $data["count"]; $i++ ) {
  $j = 1;
  while ( isset($data[$i][$j]) ) {
    $tmp["line"] = "\"" .  str_replace("\"", "\"\"", $data[$i]["code"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i]["full_name"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i]["prstkcat"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i]["prsubcat"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i][$j]["whqc"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i][$j]["qty"]) . "\"\n";
    echo $tmp["line"];
    $j++;
  }
}

奇妙なことは、私の他のクライアントでは起こらないことです。そのため、このクライアントからのデータに何か奇妙なものがあるのではないかと考えています。の一部をコメントアウトすると、$tmp["line"]表示されません。また、いずれかの行をコメントアウトすると、このコードが変更されます。

一体何がこのキャラクターをそこに入れているのでしょうか?!

更新: これは、サーバーがチャンク エンコーディングを返したときにのみ行われました。コードを次のように変更したところ、動作するようになりました (これは私の専門分野ではないので、説明が欲しいです!)。

header("Content-Disposition: attachment; filename=\"" . $file . "\"");
header("Content-type: text/csv");

$tmp["header"] = "\"code\",";
$tmp["header"].= "\"dsc\",";
$tmp["header"].= "\"cat\",";
$tmp["header"].= "\"sub\",";
$tmp["header"].= "\"whqc\",";
$tmp["header"].= "\"qty\"\n";
$tmp["line"] = "";
for ($i = 1; $i <= $data["count"]; $i++ ) {
  $j = 1;
  while ( isset($data[$i][$j]) ) {
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i]["code"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i]["full_name"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i]["prstkcat"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i]["prsubcat"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i][$j]["whqc"]) . "\",";
    $tmp["line"].= "\"" .  str_replace("\"", "\"\"", $data[$i][$j]["qty"]) . "\"\n";
    $j++;
  }
}
header("Content-Length: " . strlen($tmp["header"] . $tmp["line"]));
echo $tmp["header"] . $tmp["line"];
4

1 に答える 1

0

これを削除

echo $tmp["header"];
于 2013-06-17T09:34:20.217 に答える