2010-08-17 19 views
9

tôi không thể nhận nl2br chức năng để làm việc sau khi lấy dữ liệu từ cơ sở dữ liệu của tôi:nl2br không làm việc cho tôi

$result = mysql_query("SELECT comments..etc.etc.."); 

while ($row = mysql_fetch_array($result)) 
{ 
    echo nl2br($row["comments"]); 
} 

Trong hàng cơ sở dữ liệu comments:

\r\nThanks,\r\n 

OUTPUT:

Tương tự như trong DB:

\r\nThanks,\r\n 

Nếu tôi chỉ đơn giản là kiểm tra này ra như vậy nó hoạt động tốt:

<?php 
$mystring = "\r\nThanks,\r\n"; 
echo nl2br($mystring); 
?> 

OUTPUT:

converts \r \n to <br /> 
+0

Để làm cho bạn hiểu, ví dụ làm việc của bạn không chuyển đổi \ r \ n cho '
'thẻ. Nhưng nó sẽ thực hiện theo 2 bước: chuỗi kép được trích dẫn chuyển đổi chuỗi \ r \ n thành các ký tự dòng mới, ký tự chuyển đổi, và sau đó hàm nl2br() thêm thẻ này vào chúng (để lại các ký hiệu này nguyên vẹn). nếu bạn thêm 'echo $ mystring;' vào mã của bạn, bạn sẽ thấy không có \ r \ n \ in –

Trả lời

3

Nhiều khả năng bạn đang làm thoát hai lần, khi thêm dữ liệu vào DB.
Kiểm tra mã của bạn để thêm dữ liệu vào DB và loại bỏ thoát không cần thiết.

Rất có thể đó là một số chức năng "vệ sinh phổ quát" vô nghĩa.

Thật dễ dàng.
Hãy trích dẫn, không phải là dòng mới để minh họa. Hành vi giống nhau. Các dấu gạch chéo bị tước rồi dữ liệu được chuyển đến cơ sở dữ liệu.

Như vậy, trong trường hợp bình thường:

nguồn: It's
sau khi thoát: It\'s
bởi dấu gạch chéo thực hiện truy vấn bị lột quần áo và
cả về cơ sở dữ liệu và trở lại It's

trong thoát đôi trường hợp:

nguồn: It's
sau khi thoát: It\'s
sau khi thoát thứ hai: It\\\'s
bởi truy vấn thực hiện slash bị lột quần áo và
cả về cơ sở dữ liệu và trở lại It\'s
chúng tôi có dữ liệu của chúng tôi tha hồ.

Chỉ cần làm cho chính mình hiểu rằng thoát tôi không phải là điều huyền diệu mà làm cho dữ liệu của bạn "an toàn" (và, do đó có thể được thực hiện nhiều lần, như bạn có thể nghĩ). Nó chỉ thêm dấu gạch chéo ngược vào các ký hiệu nhất định.

+1

Bạn không trả lời câu hỏi. Có lẽ anh ta không kiểm soát được dữ liệu vào cơ sở dữ liệu của anh ta như thế nào? Dù bằng cách nào, nó ở trong đó ngay bây giờ. Sửa mã mà vô hại vệ sinh dữ liệu của anh ta sẽ không giúp được vấn đề của anh ta. – blockhead

+0

đơn giản, dude. Không phải mọi câu hỏi đều xứng đáng là một câu trả lời. –

+0

Sharpnel HI, cảm ơn cho tip, bạn đang ngay trong mã của tôi Tôi đã làm thoát hai lần vô tình, Im cố gắng để hiểu, quá trình đó sẽ xảy ra khi bạn thoát khỏi hai lần là gì? bạn có thể chỉ cho tôi để tôi hiểu điều gì xảy ra với dữ liệu khi bạn trốn thoát hai lần? cảm ơn – sebb

3

Tôi đoán là các dấu gạch chéo trong DB của bạn là dấu gạch chéo chữ (tiếp theo n hoặc r), không phải là dòng mới. Bạn có thể tìm cách để lưu trữ dòng mới trong cơ sở dữ liệu của mình không?

1

Xây dựng dựa trên những gì Cơ đốc giáo đang nói, tại sao bạn không thử thay thế chữ số '\r\n' bằng "\r\n"?

+1

Bởi vì nó phải được decease được chữa khỏi, không phải triệu chứng. –

22

thử điều này:

echo preg_replace('/\v+|\\\r\\\n/','<br/>',$row["comments"]); 
+0

cách tiếp cận tuyệt vời. và sau đó một số khác cho đầu ra ở dạng văn bản thuần. Tôi không thể tin rằng có quá nhiều người có đầu óc trực tiếp xung quanh, những người không thể di chuyển một bước sang một bên so với những gì họ đọc. "Trả lời câu hỏi khi nó diễn đạt và không bao giờ nghĩ về nền tảng của nó" - một phương châm SO thực sự. Không có vấn đề nếu một câu trả lời thực sự là một sự bất hòa. –

+0

Tôi sẽ đề nghị thay thế \ v + | \\\ r \\\ n trước tiên để nhận các dòng kết thúc đó (Mac/hầu hết Unix) và thay thế bất kỳ \ n nào còn lại cho các kết thúc dòng còn lại. Biểu thức chính quy bạn đã liệt kê sẽ chèn gấp đôi số lượng ngắt dòng cho Mac/hầu hết Unix. Nếu không, điều này sẽ trả lời câu hỏi của sebb. – greg

+0

+1 bạn giải quyết vấn đề –

2

Đảm bảo rằng bạn không sử dụng chuỗi từ tệp và/hoặc đặt trong dấu nháy đơn. Bởi vì chuỗi được xử lý theo nghĩa đen, và nl2br sẽ không hoạt động. NL2BR sẽ hoạt động với dấu hai chấm.

2

giải pháp sau sẽ làm việc cho cả hai cửa sổ cũng như cho linux/unix máy

str_replace(array("\\r\\n", "\\r", "\\n"), "<br />", "string");

6

Tôi biết đây là một bài cũ nhưng nếu như tôi bạn đang có vấp qua vấn đề này và didn trên 't công việc cho bạn, giải pháp này có thể giúp bạn thay vì:

echo nl2br(stripslashes($row["comments"])); 

hay (họ không phải là những chức năng tương tự, lưu ý bổ sung 'c' sau khi dải)

echo nl2br(stripcslashes($row["comments"])); 

Xem chủ đề ban đầu mà đã giúp tôi: nl2br() not working when displaying SQL results

+0

Cảm ơn bạn đã đăng bài. Tôi thấy rằng nl2br đã không làm việc cho tôi trong một kịch bản PHP (cũng không phải trong một mẫu Smarty) cho đến khi tôi lần đầu tiên được gọi là stripcslashes. – w5m

1

Dữ liệu bạn đã lưu trữ được allready thêm dấu gạch chéo.

Bạn phải sử dụng stripslashes() đầu tiên sau đó str_replace()

stripslashes(str_replace('\r\n','<br/>',$row["comments"])) 
Các vấn đề liên quan