1. ホーム
  2. php

[解決済み] 文字列から改行(文字がない!)を削除する方法は?

2022-04-20 04:19:24

質問

これは重複しているように見えるかもしれませんが、そうではないので安心してください。私は自分の問題に対する答えを探すためにSOとその他のウェブを検索しましたが、結局同じ不十分な"解決策"を何度も見つけました。とにかく、ここにあります。

テキストエリアからのユーザー入力を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の関連フィールドに手動でアクセスし、改行するたびにバックスペースを押せば、後でその文字列でやりたいことができるのですが、これがうまくいきません。だから、上記のフォーマットが必要なのだと思います。

解決方法は?

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

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

たとえ \n が表示されない場合、キャリッジリターンが表示されるなら、そこには見えない文字があるのです。preg置換を使えば、このような文字が検出され、修正されるはずです。