以下は、私がこの問題を解決したプロセスです。最終的には、側溝で転覆しそうになりました。
1.テキストエリアの改行文字は n であることを知っておく必要があります (個人的なテストでは、Enter キーを押すと n であることがわかりましたが、Linux では rn であるようです)
2. nl2br を使用する前に、マニュアルの説明をよく読んでください。一般的には n を
に変換すると理解されていますが、そうではありません。
説明については、PHP マニュアルを参照してください。
nl2br – 文字列内のすべての改行の前に HTML 改行を挿入します
すべての改行の前に「
」を挿入したstringを返します
改行の前に
を挿入することを意味します。
W3cschool は次のように述べています:
nl2br() 関数は、文字列内の各改行 (n) の前に HTML 改行文字 (
) を挿入します。
つまり、nl2br() は
を挿入できますが、n はまだ存在します。たとえば、nl2br がプログラム
n life network になった後、文字列ソース コードは次のようになります。
プログラム
Life.com——————-ソースコードにnがあるため行が変更されています
3. PHP 関数 str_replace を使用して、str_replace('n','
') などの関数を置き換えます。問題は、置き換えが成功せず、置き換えられていないことです。長い間取り組んでいて、テキストエリアの改行文字が n なのかどうかさえ疑問になりました。今考えると本当にショックですo(∩_∩)o...実際、テストしてn /を置き換えた後。それとは別に、私は直感的に、これは問題を解決する方法ではない、どこかで根本的に間違っていると言いました。ふと、シングルクォーテーションの問題なのかダブルクォーテーションの問題なのか考えて、 str_replace('n','
') を str_replace("n","
" ) に変更してみました。とひらめき、交換に成功しました。大汗!
マニュアルを開いて一重引用符と二重引用符をもう一度読んで、最終的にはため息をつきました。PHP は単純ですが、それでも細部に注意を払う必要があります。
マニュアルの一重引用符と二重引用符の説明は非常に詳しく説明されています。
単純な文字列を指定する最も簡単な方法は、文字列を一重引用符 (文字 ‘) で囲むことです。
単一引用符を表すには、他の多くの言語と同様に、バックスラッシュ () でエスケープする必要があります。一重引用符の前または文字列の末尾にバックスラッシュが必要な場合は、2 つのバックスラッシュを使用します。 他の文字をエスケープしようとすると、バックスラッシュ自体も表示されることに注意してください。したがって、通常はバックスラッシュ自体をエスケープする必要はありません。
文字列を二重引用符 (") で囲むと、PHP は特殊文字のエスケープ シーケンスをより多く認識します。
表 6-1. エスケープ文字
シーケンス
意味
n
改行 (LF または ASCII 文字 0×0A (10))
r
キャリッジリターン (CR または ASCII 文字 0×0D (13))
t
水平タブ文字 (HT または ASCII 文字 0×09 (9))
\
バックスラッシュ
$
ドル記号
"
二重引用符
[0-7]{1,3}
この正規表現シーケンスは、8 進数表記で表される文字と一致します
x[0-9A-Fa-f]{1,2}
この正規表現シーケンスは、16 進表記で表される文字と一致します
また、他の文字をエスケープしようとすると、バックスラッシュ自体が表示されます。
———— これで、textarea での行の折り返しの問題は明らかになりました。改行や nl2br の問題ではなく、PHP ではすべての転送が二重引用符でのみ処理されるということです。なんとも憂鬱な間違いだ。将来的には必ず心に留めておきます。