Có cách nào để chuyển đổi \ n thành <br>
?
Hiện tại, tôi đang làm như thế này:
mystring.gsub(/\n/, '<br>')
Có cách nào để chuyển đổi \ n thành <br>
?
Hiện tại, tôi đang làm như thế này:
mystring.gsub(/\n/, '<br>')
Câu trả lời:
Vâng, đường ray có simple_format
chính xác những gì bạn đang tìm kiếm, và tốt hơn một chút vì nó cũng thêm các thẻ đoạn văn. Xem
http://api.rubyonrails.org/groupes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Thí dụ:
simple_format(mystring)
Lưu ý rằng simple_format
cho phép các thẻ HTML cơ bản, nhưng cũng chuyển văn bản qua sanitize
đó loại bỏ tất cả các tập lệnh, vì vậy nó sẽ an toàn cho đầu vào của người dùng.
simple_format
tự động bao bọc văn bản được cung cấp trong <p>
thẻ và không thể tránh được chức năng này.
javascript:alert(\no!\)
như được đưa ra trong tài liệu tham khảo. Có thể có các biến thể vô tận và các biến thể trong tương lai cho các tin tặc độc hại để làm việc với.
wrapper_tag
tùy chọn cho phép thay đổi <p>
thẻ cho bất cứ điều gì khác
Bạn có thể làm cho nó tổng quát hơn bằng cách làm:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
Bằng cách này, bạn sẽ bao gồm DOS, * NIX, Mac và các kết thúc dòng không hợp lệ ngẫu nhiên.
simple_format
bạn có thể tách trên regex đó, hãy sử dụng map
để bọc các chuỗi trong việc mở và đóng p
thẻ, sau đó nối chúng lại. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.join
nên làm điều đó, mặc dù tôi đã không kiểm tra nó.
<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>
. Và nó hoạt động như một boohoo quyến rũ!
mystring
có thể chứa HTML tùy ý.
Bạn nên cẩn thận với điều này khi bạn đang làm việc với đầu vào của người dùng.
simple_format
chèn <br>
thẻ nhưng nó sẽ cho phép các thẻ html khác !
Khi sử dụng Simple_format, <b>Hello</b>
sẽ được hiển thị là " Xin chào ", bạn có thể không muốn điều này.
Thay vào đó, bạn có thể sử dụng <%= h(c.text).gsub("\n", "<br>").html_safe %>
h()
sẽ mã hóa html trước, gsub
thay thế ngắt dòng và html_safe
cho phép các <br>
thẻ được hiển thị.
Điều này sẽ hiển thị chính xác những gì người dùng đã nhập. Nó cũng cho phép thảo luận về html trong các bình luận.
simple_format
cho phép các thẻ HTML cơ bản, điều quan trọng cần lưu ý là nó cũng chuyển văn bản qua sanitize
, loại bỏ bất kỳ thứ gì có khả năng gây hại. apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
Đơn giản chỉ cần sử dụng
white-space: pre-line;
trong css và văn bản của bạn sẽ bao gồm các ngắt dòng.
Bạn cũng có thể xem xét những gì bạn đang cố gắng thực hiện - nếu bạn định dạng tốt văn bản mà mọi người đã nhập, bạn có thể xem xét một bộ lọc như Markdown để cho phép người dùng định dạng văn bản của họ mà không cần mở hộp giun là HTML. Bạn biết đấy, giống như nó ở đây tại Stack Overflow.
Không. Những gì bạn có đó là sự thay thế thường được sử dụng. Định nghĩa hầu hết mọi người sử dụng là:
def nl2br text
text.gsub(/\n/, '<br/>')
end
Nó được đặt tên như vậy vì nó bắt chước chức năng của hàm PHP cùng tên .
mystring.gsub(/\r\n|\r|\n/, '\n')
đã làm cho tôi