1

私はテキストエリアを持っています。ユーザーはテキストエリアにテキストを入力します。テキストエリアには書式設定のために改行を含めることができます。HTML の br ブレークを追加せずに、このテキストをそのまま mySQL データベースに保存します。これは「text blah blah.\n\nText2 blah blah.」のように見えます。データベース レコードで。

を使用して通常の HTML ページにテキストを表示しますecho nl2br($text);。テキストは適切にフォーマットされており、2 つの改行が 2 つの文として表示され、その間に空白行があります。

ユーザーが元のエントリを編集できるように事前設定されたテキストエリアに同じテキストを送信する場合は、次のコードを使用します。

<textarea><?php echo $text;?></textarea>

データベースに保存されているように、二重改行を含むテキストで満たされたテキストエリアが得られると思います。この場合、nl2br を使用しません。これを使用すると、文字通り HTML 文字が表示されるだけです (実際には改行は作成されません。つまり、ユーザーに br の 6 文字が表示されます)。代わりに、2 つの新しい行を連続して削除することで、2 つの新しい行が 1 つの新しい行になります。単一の新しい行が完全に取り除かれるわけではなく、単一の新しい行のままです。

したがって、要するに、テキストの行間に空白行を含める必要があるフォーマットでテキストを送信すると、テキストの重要なフォーマットが壊れて、改行が 1 行しか表示されません)。

データベースからテキストエリアにテキストを出力するときに、すべての改行を保持するにはどうすればよいですか?

4

3 に答える 3

1

これは私のために働きます:

<?php
$txt = "line1\nline2\n\nline4\nline5";
?>
<html>

<body>

<form>
<textarea rows=10><?php echo $txt ?></textarea>
</form>

</body>

</html>

line3テキストの欠如とdoubleに注意してください\n\n。このフォームをFirefoxにロードすると、予想どおり、line2/line4テキストの間に空白行が表示されます。

テキストが他の場所で壊れていないこと、および実際に2行改行としてデータベースにあることを確認してください。

于 2012-07-14T22:05:55.467 に答える
1

試すことができます... echo str_replace("\n", "\r\n", $txt)

これは単純に改行を読み取り、テキストエリアによって明確に理解される新しい行に変換します:)これが役立つことを願っています。

ありがとう。

于 2013-07-16T07:05:28.127 に答える
0

私は同じ問題を抱えていましたが、いくつかのトラブルシューティングを行った後、私の発見は次のとおりです。

値が db、session、または cookie からのものであるかどうかに関係なく、すべてのテキストエリアに \n\n 改行が表示されます。

ただし、HTML ページが縮小されている場合、最終的な HTML が縮小されると、空の行が消えます。ページサイズの縮小を支持する手段は、ドキュメントから空白を取り除きます。

実際の HTML をチェックすると、これが証明されます。

出力バッファーで OWN 縮小機能を使用するため、そのページの例外を 1 つだけ含めました。

=> つまり、重要なテキストエリアを保持しているページを監視しないでください!

ヘッダーの PHP コードは次のようになります。

$minify_exceptions = array(
    "page1.php",
    "page2.php"
);
if (isset($file_route) && in_array($file_route, $minify_exceptions)) {
    ob_start();
} else {
    ob_start("minify_html");
}

注: このコードだけでは何もしません。サード パーティの HTML ミニファイヤがある場合、または HTML が別のサーバー (Google Page Speed など) 経由でパイプ処理されている場合は、どこか (MINIFY が発生する場所) のページの例外リストを見つける必要があります。

PSよりスマートな方法は、テキストエリアタグ間のテキストをMINIFYしないようにMINIFY関数を強化することです

于 2016-03-22T10:36:36.537 に答える