あなたはストリームを使用することができます;)真の解決策については
、代わりのstr_replace
ライン・バイ・ライン、あなたはそれがインストールされていると仮定すると、Linuxのプログラムunix2dos
dos2unix
の(逆)を使用することができますこれを達成するためのフィルタ。この例では物理ファイルに書き込みますが、php://output
でも正常に動作します。
// filter class that applies CRLF line endings
class crlf_filter extends php_user_filter
{
function filter($in, $out, &$consumed, $closing)
{
while ($bucket = stream_bucket_make_writeable($in)) {
// make sure the line endings aren't already CRLF
$bucket->data = preg_replace("/(?<!\r)\n/", "\r\n", $bucket->data);
$consumed += $bucket->datalen;
stream_bucket_append($out, $bucket);
}
return PSFS_PASS_ON;
}
}
// register the filter
stream_filter_register('crlf', 'crlf_filter');
$f = fopen('test.csv', 'wt');
// attach filter to output file
stream_filter_append($f, 'crlf');
// start writing
fputcsv($f, array('1 1', '2 2'));
fclose($f);
を使用することですCRLFを必要とするWindowsのテキストエディタ、またはかなり古いWindowsアプリケーションがあれば、実際には問題にならないはずです...最近のほとんどのWindowsアプリケーションでは、単純なLFが認識されます –
+1のために申し訳ありませんが、 。しかし、あなたの質問は私にも関係しています。エスケープ文字を変更する方法はありません。 –
@MarkBaker:はい、それは私が期待したものです。残念ながら、彼らは使用しているいくつかのMISにCSVをインポートしていますが、これはメモ帳よりもスマートではありません。 – Kalessin