これはだまされているように見えるかもしれませんが、そうではないので安心してください.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 を押すと、後で文字列でやりたいことが機能します。したがって、上記の形式が必要であることはわかっています。