簡體   English   中英

在php中編寫csv文件時的空白行

[英]Blank line at the beginning when writing a csv file in php

我正在嘗試從數組中編寫csv文件,作為csv文件的標頭

$csv_fields[] = 'produto_quest';
$csv_fields[] = 'produto_quest1';
$csv_fields[] = 'comentario_aspecto_atm';
$csv_fields[] = 'aspecto_geral_int';
$csv_fields[] = 'organizacao_espaco';

$f = fopen('php://memory', 'w+');
fputcsv($f, $csv_fields, ";");

foreach ($relat as $fields) { // load from MySQL as a multidimensional array
    foreach($fields as $key => &$value1) {
        $value1 = iconv("UTF-8", "", $value1);
    }
    fputcsv($f, $fields, ";");
}
fseek($f, 0);
fpassthru($f);
fclose($f);

除了文件開頭的隱藏字符外,所有文件都是正確的。 如果我用記事本打開文件,它會正確顯示,但在Excel中,開頭有一個空行。 誰能幫我?

它看起來很好。 我測試過

$relat = array(range(1,5), range(3,7));

我沒有空白或隱藏的角色:

HTTP/1.1 200 OK
Date: Sat, 23 Nov 2013 23:26:27 GMT
Server: Apache/2.4.6 (Ubuntu)
X-Powered-By: PHP/5.5.3-1ubuntu2
Vary: Accept-Encoding
Content-Length: 109
Content-Type: text/html

produto_quest;produto_quest1;comentario_aspecto_atm;aspecto_geral_int;organizacao_espaco
1;2;3;4;5
3;4;5;6;7

更新:因為這只發生在你而不是其他人身上,我相信這是因為你的php源文件中有一些換行符。 確保標記之外沒有任何內容,例如之前文件開頭的換行符

您可以通過調用以下方法測試這是否是問題的原因:

ob_end_clean();

就在之前

fpassthru($f);

這里已經討論過類似的問題:

如何在PHP中輸出UTF-8 CSV,Excel將正確讀取?

看看最贊成的解決方案,它回應結果,而不是寫入臨時文件。 它是這樣的:

header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename=Customers_Export.csv');
echo "\xEF\xBB\xBF"; // UTF-8 BOM
echo $csv_file_content;

更新:

header('Content-Encoding: UTF-8');
header('Content-type: text/csv; charset=UTF-8');
header('Content-Disposition: attachment; filename=Customers_Export.csv');
echo "\xEF\xBB\xBF"; // UTF-8 BOM

$csv_fields[] = 'produto_quest';
$csv_fields[] = 'produto_quest1';
$csv_fields[] = 'comentario_aspecto_atm';
$csv_fields[] = 'aspecto_geral_int';
$csv_fields[] = 'organizacao_espaco';

$f = fopen('php://memory', 'w+');
fputcsv($f, $csv_fields, ";");

foreach ($relat as $fields) { // load from MySQL as a multidimensional array
    foreach($fields as $key => &$value1) {
        $value1 = iconv("UTF-8", "", $value1);
    }
    fputcsv($f, $fields, ";");
}
fseek($f, 0);
fpassthru($f);
fclose($f);

使用ob_clean(); 就在$f = fopen('php://memory', 'w+');之前$f = fopen('php://memory', 'w+');

例:

ob_clean();
$f = fopen('php://memory', 'w+');

我可以在CSV文件的開頭刪除所有空白行。

暫無
暫無

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

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