180

これはだまされているように見えるかもしれませんが、そうではないので安心してください.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」など) はありません。

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 を押すと、後で文字列でやりたいことが機能します。したがって、上記の形式が必要であることはわかっています。

4

12 に答える 12

524

ベンの解決策は受け入れられますが、str_replace()はpreg_replace()よりもはるかに高速です

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

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

于 2013-12-21T09:59:37.877 に答える
421

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

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

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

于 2012-05-25T16:02:05.873 に答える
18
$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
于 2012-05-25T16:03:13.393 に答える
12

これnl2br()は、改行をまったく削除しないためです。

すべての改行 ( 、、および) を含む<br />か、その<br> 前に挿入された文字列を返します。\r\n\n\r\n\r

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

$string = str_replace(["\r\n", "\r", "\n"], "<br />", $string);
于 2015-03-03T00:26:51.500 に答える
7

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

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

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

于 2015-08-11T12:31:21.813 に答える
7

Windowsでも適切に動作するには、使用することをお勧めします

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

"\r\n"- Windows の場合"\r"- Mac の場合 および"\n"- Linux の場合

于 2014-09-11T05:43:55.557 に答える
1

私はこの仕事をするために 3 行を使用するので、$sを「もの」と考えてください...

$s=str_replace(chr(10),'',$s);
$s=str_replace(chr(13),'',$s);
$s=str_replace("\r\n"),'',$s);
  • 伝説:

chr(10) ___改行

chr(13) ___帰り

\r\n ______改行

于 2019-10-07T13:27:30.947 に答える