Giữ ngắt dòng khỏi TextArea khi ghi vào MySQL


105

Tôi đang sử dụng một vùng văn bản để cho phép người dùng nhập nhận xét. Tuy nhiên, nếu người dùng nhập các dòng mới, các dòng mới sẽ không xuất hiện khi chúng được xuất ra. Có cách nào để làm cho ngắt dòng không.

Bất kỳ ý tưởng làm thế nào để bảo vệ các ngắt dòng?


Tôi vừa vô hiệu hóa htmlawed, và có vẻ như nó không liên quan gì đến ngắt dòng, ngắt dòng vẫn không hiển thị. Vì vậy, tôi chỉ ghi trực tiếp dữ liệu textarea vào mysql và nó không hiển thị khi tôi phản hồi dữ liệu từ cơ sở dữ liệu mysql.
Hirvesh

Tôi cũng đã duyệt qua bảng mysql bằng phpmyadmin và thấy trường nhận xét. Không có thẻ <br/> nào được lưu trữ,
Hirvesh

Tôi đang làm một hệ thống bình luận kiểu Facebook, vì vậy tôi không thực sự muốn nó là wysiwyg. Không có ý tưởng tại sao ngắt dòng không được bảo tồn sau đó?
Hirvesh

Câu trả lời:


158

Hai giải pháp cho điều này:

  1. Hàm PHP nl2br():

    ví dụ,

    echo nl2br("This\r\nis\n\ra\nstring\r");
    
    // will output
    This<br />
    is<br />
    a<br />
    string<br />
  2. Gói đầu vào trong <pre></pre>các thẻ.

    Xem: W3C Wiki - HTML / Elements / pre


2
+1, Chỉ cần trao một vị trí đặc quyền trên Favorites của tôi cho PHP nl2br():)
Zuul

1
Tôi nghĩ, việc chọn và tạo kiểu <pre> </pre> tốt hơn nhiều cho xss.
EGurelli

38

Đây là những gì tôi sử dụng

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

$inputTextlà văn bản được cung cấp bởi biểu mẫu hoặc vùng văn bản. $textToStorelà văn bản trả về từ nl2brhtmlentities, sẽ được lưu trữ trong cơ sở dữ liệu của bạn. ENT_QUOTESsẽ chuyển đổi cả dấu ngoặc kép và dấu nháy đơn, vì vậy bạn sẽ không gặp khó khăn gì với chúng.


2
Tôi tin rằng UTF-8 hiện là mặc định trong PHP. Nhưng tất nhiên không có hại gì khi nói rõ ràng.
ProfileTwist

Làm thế nào để có thể chèn khoảng trắng giữa các văn bản?
JWC ngày

Bạn nên luôn lưu trữ dữ liệu thô trong cơ sở dữ liệu. Sau đó, chuyển đổi và làm sạch dữ liệu trước khi hiển thị.
Edward

3

Có câu trả lời của riêng tôi: Sử dụng chức năng này từ dữ liệu từ textarea giải quyết vấn đề:

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

Xem thêm tại đây: http://php.net/nl2br


2

tôi đang sử dụng hai bước phương pháp này để giữ nguyên văn bản trong textarea để lưu trữ trong mysql và tại một thời điểm, tôi cũng có thể đơn giản hiển thị văn bản thuần túy .....

bước 1:

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

Trong truy vấn nhập $textToStore...

bước 2:

viết mã cho truy vấn chọn ... và các giá trị tiếng vọng trực tiếp ....

Nó hoạt động


Bạn nên luôn lưu trữ dữ liệu thô trong cơ sở dữ liệu. Sau đó, chuyển đổi và làm sạch dữ liệu trước khi hiển thị.
Edward

1

Những công việc này:

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

điều này có thể giúp bạn

vượt qua textarea wal


-8

Tại sao người ta lại khó quá trong khi nó có thể quá dễ dàng :)

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

bạn rõ ràng sẽ cần tiêu đề và có thể có nhiều trường hơn, nhưng đây là vùng văn bản của bạn


6
Điều này không an toàn và không hoàn toàn phù hợp với câu hỏi.
Evan Darwin

1
Chỉ cần thử nó .... Đăng lên email hoặc SQL .... Khoai tây khoai tây ..... Hãy thử chạy các dòng và khắc phục sự cố .... Không có một loạt nếu các dòng mã lộn xộn đôi khi hoạt động hoặc không .... :)
Duncan

Trong số tất cả các câu trả lời, điều này là tối thiểu súc tích
JacobRossDev
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.