0

テキストエリアで構成される非常に単純なフォームがあります。テキストエリア内には、データベースに保存したい MarkDown 構文があります。明らかに、改行/改行を保持することが非常に重要です。

nl2br()ただし、フォームが送信されると、 PHP関数を使用しない限り、改行がサーバーに送信されないようです。

サーバーでは、次のようにメッセージ テキストエリアの内容を取得します。

$content = $_POST['message'];

これを次のようにエコーすると:

echo $content;

テキストは 1 つの長い行にあります。

私がエコーする場合:

echo nl2br($content);

期待どおりの内容を示しています。どうしてこれなの?$content の値をデータベースに保存するだけで、改行文字が保持されると思いますか?

4

1 に答える 1

3

ブラウザーは改行を LF 文字 (= \n) として送信します。

これらを出力すると、ブラウザーは通常の HTML レンダリング モードで改行を無視するため、それらを表示しません。<br>それらをタグに変換した場合にのみ、ブラウザーはそれらを認識します。

コンテンツ タイプを に設定してみるtext/plainと、ブラウザがライン フィードもレンダリングすることがわかります。

header('Content-type: text/plain');
echo $content;

データをフォーマットせずにデータベースに保存します。つまり、データをタグに変換しないでください。<br>データを出力するときにこの変換を行います。

于 2013-07-31T20:21:21.713 に答える