13

適切に機能しているWebサイトのデータベースにテキストエリアを送信しています。しかし、データベースから(PHPを介して)CSVを生成すると、すべての改行が結果のCSVで混乱します。CSVリーダーは、入力からの改行を新しい行に解釈します。

私は次のアプローチを試しました:

  1. フィールドを引用符で囲みます。

  2. これ:

    $field = str_replace(array('\n', '\r', '\r\n', '\n\r'), ',', $original_field);
    
  3. またこれ:

    $field = strip_tags(nl2br($original_field));
    
  4. 上記のすべてのアプローチを組み合わせます。

とにかく、最終結果はまだ混乱したCSVであり、ユーザーが入力した改行で中断されます。テキスト領域からの改行をブロックすることができましたが、CSV側でもこれを修正する必要があるレガシー送信がたくさんあります。

なぜ機能しないのですか?この問題を解決するにはどうすればよいですか?

4

4 に答える 4

17

(ユーザーの)受け入れられた回答user1517891が正しくない前に、ある場合は文字列を2回置き換え\r\nます... 2つのコンマとして置き換えます,。最初に => を置き換え\r,次に\n=>を置き換え,ます。

次のように、異なる順序で使用する必要があります。

$field = str_replace(array("\r\n", "\n\r", "\n", "\r"), ',', $original_field);
于 2015-07-30T14:20:24.163 に答える
9

Use double quotes:

$field = str_replace(array("\n", "\r", "\r\n", "\n\r"), ',', $original_field);
于 2012-10-31T13:12:04.490 に答える
4

preg_replace()ではなく、これに使用することをお勧めしstr_replace()ます。その理由は、複数の改行と と の組み合わせが存在する可能性があるためです\r\nそれらすべてを 1 つのコンマだけに置き換えたいと思うでしょう。

trim()末尾の空白行を削除するために使用することもお勧めします。

$field = preg_replace('/[\n\r]+/', ',', trim($original_field));
于 2012-10-31T13:20:52.800 に答える
2

同様のタグを二重引用符で囲む必要が\nあります。そうしないと、改行ではなく単純な文字列として扱われます。

于 2012-10-31T13:11:08.857 に答える