試したすべてのバリエーションで発生する主な問題は、両方の\n
および\r
は、二重引用符で囲まれた文字列で使用した場合にのみエスケープされるエスケープ文字です。 。
PHPでは、'\r\n'
の間に大きな違いがあります および"\r\n"
。最初のシングルクォートと2番目のダブルクォートに注意してください。
つまり、'\r\n'
"\r\n"
に対して、スラッシュ、「r」、別のスラッシュ、および「n」を含む4文字の文字列になります。 改行文字と復帰文字の2文字が含まれます。
したがって、質問に対する直接の答えは、質問で示した2番目の例を使用する必要があるということですが、一重引用符ではなく二重引用符を使用します。
$text = str_replace("\r\n",'', $text);
これによりすべてが削除されることを指摘しておく価値があります 入力からの新しい行、およびそれらを何も置き換えないでください。入力に複数の新しい行がある場合、それらはすべて削除されます。あなたのアプリケーションについてもっと知らなければ、これがあなたが望むものであるかどうかはわかりませんが、ここにいくつかの考えがあります:
-
end から空白行(およびその他の空白)のみを削除する場合 入力文字列の
trim()
を使用できます 代わりに機能します。 -
HTMLに出力するためのフォーマットを保持したい場合は、
nl2br()
関数はあなたを助けます。フォーマットせずにHTMLに出力する場合は、ブラウザが\ n文字からの改行をレンダリングしないため、それらを削除する必要がない場合があります。 -
例のように、新しい行を何も置き換えない場合、最初の行の最後の単語が2番目の行の最初の単語に直接ぶつかります。何もないのではなく、スペース文字に置き換えることをお勧めします。
-
ユーザーが
\n
のみで入力を送信できる可能性があります 一致する\r
なし 、またはその逆(これは、OSまたはブラウザ、意図的なハッキング、またはその他の多くの理由が原因である可能性があります)。 すべてを置き換える場合 これらの両方の文字のインスタンス、それを行うためのより信頼できる方法は、それらが互いに隣り合っていることに依存するのではなく、それらを個別に置き換えることです。str_replace()
配列で指定することにより、これを行うことができます。strtr()
を使用することもできます またはpreg_replace()
同じ目標を達成するために。
お役に立てば幸いです。