Pertahankan Pemutusan Baris Dari TextArea Saat Menulis Ke MySQL

105

Saya menggunakan textarea untuk memungkinkan pengguna memasukkan komentar. Namun, jika pengguna memasukkan baris baru, baris baru tidak muncul saat dikeluarkan. Apakah ada cara untuk membuat jeda baris tetap ada.

Tahu bagaimana cara mempertahankan jeda baris?

Hirvesh
sumber
Saya baru saja menonaktifkan htmlawed, dan tampaknya itu tidak ada hubungannya dengan jeda baris, jeda baris masih tidak muncul. Jadi saya hanya menulis data textarea langsung ke mysql, dan itu tidak muncul ketika saya menggemakan data dari database mysql.
Hirvesh
Saya juga telah menjelajahi tabel mysql menggunakan phpmyadmin dan melihat kolom komentar. Tidak ada tag <br/> yang disimpan,
Hirvesh
Saya melakukan sistem komentar gaya Facebook, jadi saya tidak benar-benar menginginkannya menjadi wysiwyg. Tidak ada ide mengapa jeda baris tidak dipertahankan?
Hirvesh

Jawaban:

158

Dua solusi untuk ini:

  1. Fungsi PHP nl2br() :

    misalnya,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Bungkus masukan dalam <pre></pre>tag.

    Lihat: Wiki W3C - HTML / Elements / pre

superUntitled
sumber
2
+1, Baru saja dianugerahi tempat istimewa di Favorit saya untuk PHP nl2br():)
Zuul
1
Saya pikir, memilih dan menata <pre> </pre> jauh lebih baik untuk xss.
EGurelli
38

Inilah yang saya gunakan

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

$inputTextadalah teks yang disediakan oleh formulir atau textarea. $textToStoreadalah teks yang dikembalikan dari nl2brdan htmlentities, untuk disimpan dalam database Anda. ENT_QUOTESakan mengonversi tanda kutip ganda dan tunggal, jadi Anda tidak akan mengalami masalah dengan itu.

hiroki
sumber
2
Saya yakin UTF-8 sekarang menjadi default dalam PHP. Tapi tentu saja tidak ada salahnya untuk bersikap eksplisit.
ProfileTwist
Bagaimana cara memasukkan spasi putih di antara teks?
JWC
Anda harus selalu menyimpan data mentah di database. Kemudian ubah dan bersihkan data sebelum Anda menampilkannya.
Edward
3

Punya jawaban saya sendiri: Menggunakan fungsi ini dari data dari textarea memecahkan masalah:

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

Selengkapnya di sini: http://php.net/nl2br

Hirvesh
sumber
2

Saya menggunakan dua langkah metode ini untuk mempertahankan teks yang sama yang ada di textarea untuk disimpan di mysql dan pada saat yang sama saya juga bisa menampilkan teks biasa .....

Langkah 1:

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

Dalam kueri masukkan $textToStore....

Langkah 2:

tulis kode untuk kueri pemilihan ... dan nilai gema langsung ....

Berhasil

Jayendra Bariya
sumber
Anda harus selalu menyimpan data mentah di database. Kemudian ubah dan bersihkan data sebelum Anda menampilkannya.
Edward
1

Ini bekerja:

function getBreakText($t) {
    return strtr($t, array('\\r\\n' => '<br>', '\\r' => '<br>', '\\n' => '<br>'));
}
UbiQue
sumber
0
function breakit($t) {
    return nl2br(htmlentities($t, ENT_QUOTES, 'UTF-8'));
}

ini dapat membantu Anda

lulus textarea wal

Libin Thomas
sumber
-8

mengapa membuat orang sangat sulit padahal bisa sangat mudah :)

//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("[email protected]", "Website Form Submission", $message, $headers);

Anda jelas akan membutuhkan tajuk dan kemungkinan memiliki lebih banyak bidang, tetapi ini adalah textarea Anda yang diurus

Duncan
sumber
6
Ini tidak aman dan tidak relevan dengan pertanyaan.
Evan Darwin
1
Coba saja .... Kirim ke email atau SQL .... Kentang kentang ..... Coba jalankan baris dan perbaiki masalah .... Tanpa banyak jika baris kode berantakan yang terkadang berfungsi atau tidak .... :)
Duncan
Dari semua jawaban, yang ini paling tidak ringkas
JacobRossDev