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


146

これはだまされているように見えるかもしれませんが、そうではありませんのでご安心ください。私はSOと他のWebの両方で私の問題に対する回答を検索し、同じ不十分な「解決策」を何度も見つけました。とにかく、ここに行きます:

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

文字列の例は次のようになります。

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

Greetings,
Bill

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

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

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を押すと、後で文字列を使用して実行したいことが機能します。だから私は上記のフォーマットが必要であることを知っています。


文字列が最初の例のように見える場合、どのようにして改行文字が含まれていないと言えますか?少なくとも2つあります。「ありがとう」の後に2つ続けて。
アーネストフリードマンヒル

公正なenuff @ ErnestFriedman-Hill、あなたは明らかに正しい-そこに「何か」があり、それは私が知っているものではなく、どちらも見えないだけです。
Johannes Pille、

また、改行文字のない新しい行を作成する方法がわかりません。16進エディターを使用して文字列を検査できますか?新しい行の文字が見つかる
はず

回答:


376

すべての改行とキャリッジリターンを削除するpregで置き換えることができる必要があります。コードは次のとおりです。

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

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


信じられない。私はあなたとあなたの@bsdnoobzの答えに沿ってすべてを試すことを誓ったかもしれませんが、どちらもうまくいきます。ええと、私がそこに持っていた精神的なブロックが何であれ、両方の人が私にたくさんの時間を節約しました。結構な質問だったと思います。みんなありがとう!
Johannes Pille、

3
これはすべての改行、つまりWindowsシステムで作成された改行とは一致しないことに注意してください。これらをキャッチするには、代わりに次のRegExを使用できます/\r|\n|\r\n/
Toastrackenigma

6
(シーケンスを終了する任意の行を表します)の使用\ R stackoverflow.com/a/16274784/1491212
タルメルLarcier

435

ベンのソリューションは許容範囲ですが、str_replace()preg_replace()よりもはるかに高速です

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

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


5
この答えが信用できるとは信じられません。preg_replace()でこれまでに100件の親指
pimbrouwers 2014

62
重要:改行コードと改行コードの周りには、二重引用符を使用してください。一重引用符を使用すると、これらは正しく処理されません!
bwright

47
いいね->「より少ないCPUパワーを使用して、世界の二酸化炭素排出量を減らします。」
1

3
@Joeri:最初の2つで処理されるため、最後の1つは呼び出されません。冗長なコードです。
nightfox89 2015年

4
@Joeri str_replaceがすべてのオカレンスを削除することを考慮すると、\ rと\ nの両方がいずれにしても削除されませんか?
Bram Vanroy、2016

16
$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

11

ので、それはですnl2br()すべての改行を削除しません。

戻り値の文字列<br />または<br> の前に挿入された全ての改行(\r\n\n\r\nおよび\r)。

str_replace代わりに使用:

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

7

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))、垂直タブ。

3
これは、文字列の最初と最後の改行のみをターゲットにします。文字列の中央の改行は変更されません。
mickmackusa、2018年

6

Windowsでも正しく機能するために、使用することをお勧めします

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

"\r\n"-Windowsの場合"\r"-Macの"\n"場合-Linuxの場合


2
申し訳ありませんが、12年に振り返ってみても、これは冗長であると断言できます。自分で次のことを確認する:すべての場合\r\n、文字列で削除され、その理由は、互いに直接に従っているもののためのケースではないでしょうか?
Johannes Pille 2014

本当に、この明白なことは頭に浮かびませんでした...ありがとう:)私は問題を抱えていることに気づきましたが、それは逆であり、\r\nWindowsで使用していて、Linuxでは動作しませんでした。
Ajjaah

まあ、私はこの関数を使用して改行をコンマで置き換えているので、住所は1行のテキスト\r\nです。つまり、FIRSTを置き換えると、改行があった場合、各部分で2つではなく1つのコンマが使用されます
Martin

@Martinはい、そうです、私は同じことを理解したので、\r\n最初に置き換え、次に置き換えます。\rそして\n、私は私の回答を編集しました。
Ajjaah 2015

これはまだ冗長です。すべての\rand \rを削除する\r\n場合、を削除する必要はありませんstr_replace(array("\r","\n"), "", $buffer);。ユーザーは同じ結果を得ることができます。
ストラミン

6

str_replace(PHP_EOL、null、$ str);


1
これは質問に答えるかもしれませんが、あなたの答えについて少し説明することをお勧めします。
Anirudh Sharma

PHP_EOLは、文字列を読み取るときに常に機能するとは限りません。あなたがそれらを書くときにそれは行います。
nightfox89 2015年

コードのみの回答は、OPや将来の読者の教育にほとんど役立たないため、StackOverflowでの価値は低くなります。
mickmackusa

4

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

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

PHP_EOLを検索置換パラメーターとして使用することも良い考えです!称賛。


1

別の組み込み:trim()

trim  Strip whitespace (or other characters) from the beginning and end of a string
Description 
trim ( string $str [, string $character_mask = " \t\n\r\0\x0B" ] ) : string

This function returns a string with whitespace stripped from the beginning and end of str.
Without the second parameter, trim() will strip these characters:

    " " (ASCII 32 (0x20)), an ordinary space.
    "\t" (ASCII 9 (0x09)), a tab.
    "\n" (ASCII 10 (0x0A)), a new line (line feed).
    "\r" (ASCII 13 (0x0D)), a carriage return.
    "\0" (ASCII 0 (0x00)), the NUL-byte.
    "\x0B" (ASCII 11 (0x0B)), a vertical tab.

さまざまな種類のテキストファイルから改行を削除するためにありますが、htmlは処理しません。


0

この作業には3行を使用しているので、$ sを「もの」と見なします...

$s=str_replace(chr(10),'',$s);
$s=str_replace(chr(13),'',$s);
$s=str_replace("\r\n"),'',$s);
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.