これは間違いのように見えるかもしれませんが、そうではないことを確認してください - 私は自分の問題に対する答えを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を押すことができます。そして後で文字列を処理するためにやりたいことができます。だから私は私が上記のフォーマットが必要であることを知っています。
あなたはそれをすべての改行と復帰を取り除くpregで置き換えることができるはずです。コードは次のとおりです。
preg_replace( "/\r|\n/", "", $yourString );
\n
文字が表示されていない場合でも、キャリッジリターンを取得している場合は見えない文字があります。 preg replaceはそれらをつかんで修正する必要があります。
ベンの解決法 は許容できますが、 str_replace() は preg_replace() よりはるかに速いです。
$buffer = str_replace(array("\r", "\n"), '', $buffer);
より少ないCPUパワーを使用して、世界の二酸化炭素排出量を削減します。
$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
これは nl2br()
がまったく新しい行を削除しないからです。
<br />
または<br>
が all改行の前に挿入された文字列を返します(\r\n
、\n\r
、\n
および\r
)。
代わりにstr_replace
を使用してください。
$string = str_replace(array("\r\n", "\r", "\n"), "<br />", $string);
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))、垂直タブ。
str_replace(PHP_EOL、null、$ str);
Windows上でも正しく動作させるために、私は使うことを勧めます
$buffer = str_replace(array("\r\n", "\r", "\n"), "", $buffer);
"\r\n"
- Windows用、"\r"
- Mac用および"\n"
- Linux用
もう少し機能的なもの(どこでも使いやすい):
function strip_carriage_returns($string)
{
return str_replace(array("\n\r", "\n", "\r"), '', $string);
}
検索置換パラメータとしてPHP_EOLを使用することもお勧めです。賞賛.