MySQLへの書き込み時にTextAreaからの改行を保持する


105

textareaを使用して、ユーザーがコメントを入力できるようにしています。ただし、ユーザーが新しい行を入力した場合、新しい行は出力時に表示されません。改行を残す方法はありますか?

改行を保持する方法はありますか?


htmlawedを無効にしたところ、改行とは関係がないようですが、改行はまだ表示されません。そのため、textareaデータを直接mysqlに書き込んでいるだけで、mysqlデータベースからデータをエコーし​​ても表示されません。
Hirvesh、2011

また、phpmyadminを使用してmysqlテーブルを参照し、コメントフィールドを見ました。<br/>タグは保存されていません
Hirvesh

Facebookスタイルのコメントシステムを使用しているので、wysiwygにしたくないのです。改行が保存されない理由はありませんか?
Hirvesh、2011

回答:


158

このための2つのソリューション:

  1. PHP関数nl2br()

    例えば、

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
    
  2. 入力を<pre></pre>タグで囲みます。

    参照: W3C Wiki-HTML / Elements / pre


2
+1、ちょうど私のお気に入りのPHPの特権スポットを授与されましたnl2br():)
Zuul

1
xssの場合、<pre> </ pre>を選択してスタイル設定する方がはるかに良いと思います。
EGurelli 2016年

38

これが私が使うものです

$textToStore = nl2br(htmlentities($inputText, ENT_QUOTES, 'UTF-8'));

$inputTextフォームまたはテキストエリアによって提供されるテキストです。 $textToStore返されたテキストであるnl2brhtmlentities、データベースに格納します。 ENT_QUOTESは二重引用符と単一引用符の両方を変換するので、それらに問題はありません。


2
PHPではUTF-8がデフォルトになっていると思います。しかし、もちろんそれは明示的であることを害しません。
ProfileTwist 2014年

テキスト間に空白を挿入する方法は?
JWC 2017年5

データは常にデータベースに保存する必要があります。次に、表示する前にデータを変換およびサニタイズします。
エドワード

3

私自身の答えを得ました:textareaからのデータからこの関数を使用すると問題が解決します:

function mynl2br($text) { 
   return strtr($text, array("\r\n" => '<br />', "\r" => '<br />', "\n" => '<br />')); 
} 

詳細:http : //php.net/nl2br


2

私はこの2つの方法の手順を使用して、textareaにある同じテキストを保持してmysqlに保存し、取得時にプレーンテキストを表示することもできます。

ステップ1:

$status=$_POST['status'];<br/>
$textToStore = nl2br(htmlentities($status, ENT_QUOTES, 'UTF-8'));

クエリに$textToStore...を入力します。

ステップ2:

選択クエリのコードと直接エコー値を記述します。

できます


データは常にデータベースに保存する必要があります。次に、表示する前にデータを変換およびサニタイズします。
エドワード

1

これは機能します:

function getBreakText($t) {
    return strtr($t, array('\\r\\n' => '<br>', '\\r' => '<br>', '\\n' => '<br>'));
}

0
function breakit($t) {
    return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
}

これはあなたを助けるかもしれません

textarea walを渡す


-8

makeがすごく簡単なのに、なぜすごくハードな人なのか:)

//here is the pull from the form
$your_form_text = $_POST['your_form_text'];


//line 1 fixes the line breaks - line 2 the slashes
$your_form_text = nl2br($your_form_text);
$your_form_text = stripslashes($your_form_text);

//email away
$message = "Comments: $your_form_text";
mail("destination_email@whatever.com", "Website Form Submission", $message, $headers);

あなたは明らかにヘッダーが必要で、おそらくより多くのフィールドがありますが、これはあなたのtextareaが処理するものです


6
これは安全ではなく、質問にはあまり関係ありません。
エヴァンダーウィン

1
試してみてください。...メールまたはSQLに投稿してください。...ジャガイモ.... :)
ダンカン

すべての回答のうち、これは最も簡潔です
JacobRossDev
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.