รักษาเส้นแบ่งจาก TextArea เมื่อเขียนถึง MySQL


105

ฉันใช้ textarea เพื่อให้ผู้ใช้ป้อนความคิดเห็น อย่างไรก็ตามหากผู้ใช้เข้าสู่บรรทัดใหม่บรรทัดใหม่จะไม่ปรากฏขึ้นเมื่อมีการส่งออก มีวิธีใดบ้างที่จะทำให้เส้นแบ่งอยู่ได้

มีความคิดอย่างไรที่จะรักษาเส้นแบ่ง?


ฉันเพิ่งปิดใช้งาน htmlawed และดูเหมือนว่าจะไม่มีส่วนเกี่ยวข้องกับการแบ่งบรรทัด แต่การแบ่งบรรทัดก็ยังไม่แสดง ดังนั้นฉันแค่เขียนข้อมูล textarea ไปยัง mysql โดยตรงและจะไม่ปรากฏขึ้นเมื่อฉันสะท้อนข้อมูลจากฐานข้อมูล mysql
Hirvesh

ฉันยังเรียกดูตาราง mysql โดยใช้ phpmyadmin และเห็นช่องแสดงความคิดเห็น ไม่มีการจัดเก็บแท็ก <br/>
Hirvesh

ฉันกำลังทำระบบแสดงความคิดเห็นแบบ Facebook ดังนั้นฉันไม่อยากให้เป็นแบบ wysiwyg ไม่มีความคิดว่าทำไมการแบ่งบรรทัดจึงไม่รักษาไว้?
Hirvesh

คำตอบ:


158

สองวิธีสำหรับสิ่งนี้:

  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
ฉันคิดว่าการเลือกและจัดแต่งทรงผม <pre> </pre> ดีกว่ามากสำหรับ xss
EGurelli

38

นี่คือสิ่งที่ฉันใช้

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

$inputTextคือข้อความที่มาจากแบบฟอร์มหรือพื้นที่ข้อความ $textToStoreคือข้อความที่ส่งคืนจากnl2brและhtmlentitiesที่จะเก็บไว้ในฐานข้อมูลของคุณ ENT_QUOTESจะแปลงทั้งคำพูดคู่และเดี่ยวดังนั้นคุณจะไม่มีปัญหากับคำพูดเหล่านั้น


2
ฉันเชื่อว่า UTF-8 เป็นค่าเริ่มต้นใน PHP แล้ว แต่แน่นอนว่ามันไม่เจ็บที่จะโจ่งแจ้ง
ProfileTwist

จะแทรกช่องว่างสีขาวระหว่างข้อความได้อย่างไร?
JWC

คุณควรเก็บข้อมูลดิบไว้ในฐานข้อมูลเสมอ จากนั้นแปลงและล้างข้อมูลก่อนที่จะแสดง
Edward

3

มีคำตอบของตัวเอง: การใช้ฟังก์ชันนี้จากข้อมูลจาก textarea ช่วยแก้ปัญหาได้:

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

เพิ่มเติมที่นี่: http://php.net/nl2br


2

ฉันใช้สองขั้นตอนวิธีการนี้เพื่อรักษาข้อความเดียวกันซึ่งอยู่ในtextareaเพื่อจัดเก็บใน mysql และในเวลาที่ได้รับฉันยังสามารถแสดงข้อความธรรมดาได้ .....

ขั้นตอนที่ 1:

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

ในการสอบถามป้อน$textToStore....

ขั้นตอนที่ 2:

เขียนโค้ดสำหรับ Select query ... และค่า echo โดยตรง ....

มันได้ผล


คุณควรเก็บข้อมูลดิบไว้ในฐานข้อมูลเสมอ จากนั้นแปลงและล้างข้อมูลก่อนที่จะแสดง
Edward



-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);

เห็นได้ชัดว่าคุณต้องการส่วนหัวและอาจมีฟิลด์มากกว่านี้ แต่นี่คือพื้นที่ที่คุณดูแล


6
สิ่งนี้ไม่ปลอดภัยและไม่เกี่ยวข้องกับคำถามมากนัก
Evan Darwin

1
เพียงแค่ลองใช้ .... โพสต์ไปที่อีเมลหรือ SQL .... มันฝรั่งมันฝรั่ง ..... ลองใช้บรรทัดและแก้ไขปัญหา .... โดยไม่ต้องมีบรรทัดหากโค้ดยุ่ง ๆ ที่บางครั้งใช้งานได้หรือไม่ได้ .... :)
Duncan

จากคำตอบทั้งหมดคำตอบนี้มีความกระชับน้อยที่สุด
JacobRossDev
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.