18

fputcsv を使用して csv からのデフォルトの引用を避ける

fputcsv($fp, $array, ',', '"'); // OR fputcsv($fp, $array);

test.csv 内

testname,045645765789,"""04.07.2012 12:10:52"""

ここで上記の引用を避ける方法は?

以下のように

testname,045645765789,04.07.2012 12:10:52
4

2 に答える 2

22

二重引用符をエスケープするために 2 つの二重引用符が使用されているため、日付/時刻が既に引用されているように見えます。正しく引用された CSV を取得したいだけの場合は、既存の二重引用符をすべて削除してみてください (これは少し強引かもしれません)。

$array = array('testname',045645765789,'"04.07.2012 12:10:52"');
$array = str_replace('"', '', $array);

fputcsv($fp, $array);

// Output: testname,79323055,"04.07.2012 12:10:52"

は、スペースを含む文字列の周りに何かfputcsvを配置したいので、引用符がまったく必要ない場合は、回避するか、独自の関数を作成して必要なことを行う必要があります。この質問には多くの優れた解決策があります(編集:これは別のリンクでした)。あるいは、 PHP マニュアルのコメントに他の解決策がいくつかあります。

最初のリンクに基づいて、次のことができます。

$array = array('testname',045645765789,'"04.07.2012 12:10:52"');
$array = str_replace('"', '', $array);

fputs($fp, implode(',', $array)."\n");

// Output: testname,79323055,04.07.2012 12:10:52 
于 2012-07-17T06:20:06.920 に答える
1

これは古い質問であることは知っていますが、同様の問題があり、最終的にはあきらめて、適切なヘッダーで編集して、ブラウザーにファイルをダウンロードするように指示しましたfputcsvecho私はこれが問題に具体的に対処していないことを知っていますが、fputcsv私がそれに費やした時間を考えると、スペースの問題に対する解決策がないことに気付きました (可能な場合でも、問題に値するよりも多くの作業が必要になる可能性が高いものを除いて)、私は最も簡単な解決策を採用しました。ダウンロード可能な動的な CSV ファイルを作成することが目標である場合、以下のコードは非常に簡単かつ柔軟にタスクを実行します。私の問題は、使用しているサービスで必要とされるように、すべてのフィールドを二重引用符で囲む必要があることでした。ただし、一部のフィールドにはスペースが含まれていました。これは、一重引用符 (または二重引用符) が自動的に追加されることを意味します。fputcsvつまり、 のような値が得られ"'this is a value'"ました。何を試しても、データが正しく出力されませんでした。したがって、これで解決します(ただし、使用しませんfputcsvが、結果は同じなので必要ないと思います):

$filename="my_file.csv";
header("Content-Type: text/csv; charset=utf-8");
header("Content-Disposition: attachment; filename=$filename");

for ($i=0; $i<=10; $i++) {
    $value1 = "Here is some value";
    $value2 = "Here is another value";
    $value3 = "Another value";

    echo $value1 . ",";
    echo $value2 . ",";
    echo $value3;
    if ($i != 10) echo "\n"; //only add new line if it's not the last line
}

必要に応じて、次のようにして値を二重引用符で囲むこともできます。

for ($i=0; $i<=10; $i++) {
    $value1 = "Here is some value";
    $value2 = "Here is another value";
    $value3 = "Another value";

    echo '"'. $value1 . "\",";
    echo '"'. $value2 . "\",";
    echo '"'. $value3 . "\"";
    if ($i != 10) echo "\n"; //only add new line if it's not the last line
}

この特定の書式設定の問題で問題が発生している場合、これが誰かの時間を節約できることを願っています.

于 2014-11-16T05:54:33.667 に答える