web-dev-qa-db-ja.com

文字列から改行(文字なし)を削除する方法

これは間違いのように見えるかもしれませんが、そうではないことを確認してください - 私は自分の問題に対する答えをSOと他のウェブの両方で検索し、同じ不十分な解決策を見つけることになりました" 何度も。とにかく、ここに行きます:

テキストエリアからMySQLデータベースへのユーザー入力を保存しています(WordPress環境内ですが、この問題には関係ないはずです)。それは後でサイトのバックエンドで管理者に見せられるためにDBから検索されます。ユーザーが改行付きのテキストを送信すると(つまりEnterキーを押すと)、問題が発生します。

サンプル文字列は次のようになります。

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!

Greetings,
Bill

文字列に行末文字( "\ n"、 "\ r"など)はありません。

HTML出力を生成するためにnl2br()を使用していますが、それだけでは不十分です。結果は次のとおりです。

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill

私が理解している限りでは、nl2br()の結果は、タグを挿入していて、最初に改行を置き換えることになっていないので、どれが正しいのでしょうか。

しかし私が必要とするフォーマットはこれでしょう:

Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br /><br />Greetings,<br />Bill

文字列に "\ n"などのEOL文字が含まれている場合は、str_replace()またはpreg_replace()を使用してそれを実行します。そもそもそこにキャラクターがいます。

私は手動でDB内の関連フィールドにアクセスし、改行ごとにBackspaceを押すことができます。そして後で文字列を処理するためにやりたいことができます。だから私は私が上記のフォーマットが必要であることを知っています。

121
Johannes Pille

あなたはそれをすべての改行と復帰を取り除くpregで置き換えることができるはずです。コードは次のとおりです。

preg_replace( "/\r|\n/", "", $yourString );

\n文字が表示されていない場合でも、キャリッジリターンを取得している場合は見えない文字があります。 preg replaceはそれらをつかんで修正する必要があります。

325
Ben Roux

ベンの解決法 は許容できますが、 str_replace()preg_replace() よりはるかに速いです。

$buffer = str_replace(array("\r", "\n"), '', $buffer);

より少ないCPUパワーを使用して、世界の二酸化炭素排出量を削減します。

384
Demis Palma ツ
$str = "
Dear friends, I just wanted so Hello. How are you guys? I'm fine, thanks!<br />
<br />
Greetings,<br />
Bill";

echo str_replace(array("\n", "\r"), '', $str);  // echo $str in a single line
15
flowfree

これは nl2br() がまったく新しい行を削除しないからです。

<br />または<br>all改行の前に挿入された文字列を返します(\r\n\n\r\nおよび\r)。

代わりにstr_replaceを使用してください。

$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
11
kenorb

PHPトリム も使えます

この関数は、strの最初と最後から空白を取り除いた文字列を返します。 2番目のパラメータがなければ、trim()はこれらの文字を取り除きます。

  • ""(ASCII 32(0x20))、通常のスペース。
  • "\ t"(ASCII 9(0x09))、タブ.
  • "\ n"(ASCII 10(0x0A))、改行(改行).
  • "\ r"(ASCII 13(0x0D))、キャリッジリターン。
  • "\ 0"(ASCII 0(0x00))、NULバイト.
  • "\ x0B"(ASCII 11(0x0B))、垂直タブ。
7
Gijs de Jong

str_replace(PHP_EOL、null、$ str);

5
Rafanake

Windows上でも正しく動作させるために、私は使うことを勧めます

$buffer = str_replace(array("\r\n", "\r", "\n"), "", $buffer);

"\r\n" - Windows用、"\r" - Mac用および"\n" - Linux用

5
Ajjaah

もう少し機能的なもの(どこでも使いやすい):

function strip_carriage_returns($string)
{
    return str_replace(array("\n\r", "\n", "\r"), '', $string);
}

検索置換パラメータとしてPHP_EOLを使用することもお勧めです。賞賛.

4
tfont