มีวิธี Railsy ในการแปลง \ n เป็น<br>
หรือไม่?
ตอนนี้ฉันทำแบบนี้:
mystring.gsub(/\n/, '<br>')
มีวิธี Railsy ในการแปลง \ n เป็น<br>
หรือไม่?
ตอนนี้ฉันทำแบบนี้:
mystring.gsub(/\n/, '<br>')
คำตอบ:
ใช่รางมีsimple_format
สิ่งที่คุณกำลังมองหาและดีกว่าเล็กน้อยเนื่องจากเพิ่มแท็กย่อหน้าด้วย ดู
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
ตัวอย่าง:
simple_format(mystring)
โปรดทราบว่าsimple_format
อนุญาตให้ใช้แท็ก HTML พื้นฐาน แต่ยังส่งผ่านข้อความsanitize
ซึ่งจะลบสคริปต์ทั้งหมดดังนั้นจึงควรปลอดภัยสำหรับการป้อนข้อมูลของผู้ใช้
simple_format
จะรวมข้อความที่ให้ไว้ใน<p>
แท็กโดยอัตโนมัติและไม่สามารถหลีกเลี่ยงฟังก์ชันนี้ได้
javascript:alert(\no!\)
ที่ระบุในการอ้างอิง อาจมีรูปแบบที่ไม่สิ้นสุดและรูปแบบในอนาคตสำหรับแฮกเกอร์ที่เป็นอันตรายในการทำงานด้วย
wrapper_tag
ตัวเลือกที่อนุญาตให้เปลี่ยน<p>
แท็กสำหรับสิ่งอื่น
คุณสามารถทำให้กว้างขึ้นได้โดยทำ:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
วิธีนี้จะครอบคลุม DOS, * NIX, Mac และการลงท้ายบรรทัดที่ไม่ถูกต้องโดยไม่ได้ตั้งใจ
simple_format
คุณสามารถแยกใน regex นั้นได้ให้ใช้map
เพื่อรวมสตริงในการเปิดและปิดp
แท็กจากนั้นรวมเข้าด้วยกัน mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.join
ควรทำแม้ว่าฉันจะไม่ได้ทดสอบก็ตาม
<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>
ที่สร้างความปลอดภัยในรางมุมมองเพียงแค่ทำอะไรเช่นนี้และยังให้คุณสามารถเพิ่มระดับสำหรับแต่ละรายการที่สร้าง: และมันใช้งานได้อย่างมีเสน่ห์ boohoo!
mystring
อาจมี HTML ที่กำหนดเอง
คุณควรระมัดระวังในเรื่องนี้เมื่อคุณจัดการกับข้อมูลที่ผู้ใช้ป้อน
simple_format
แทรก<br>
แท็ก แต่จะอนุญาตแท็ก html อื่น ๆ !
เมื่อใช้ simple_format <b>Hello</b>
จะแสดงผลเป็น " สวัสดี " คุณอาจไม่ต้องการสิ่งนี้
แต่คุณสามารถใช้<%= h(c.text).gsub("\n", "<br>").html_safe %>
h()
จะเข้ารหัส html ก่อนgsub
แทนที่ตัวแบ่งบรรทัดและhtml_safe
อนุญาตให้แสดง<br>
แท็ก
สิ่งนี้จะแสดงสิ่งที่ผู้ใช้ป้อน นอกจากนี้ยังอนุญาตให้พูดคุยเกี่ยวกับ html ในความคิดเห็นเช่น
simple_format
จะอนุญาตให้ใช้แท็ก HTML พื้นฐาน แต่สิ่งสำคัญคือต้องทราบว่ามันส่งผ่านข้อความด้วยsanitize
ซึ่งจะลบสิ่งที่อาจเป็นอันตรายออกไป apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
เพียงแค่ใช้
white-space: pre-line;
ใน css ของคุณและข้อความจะรวมอยู่ในตัวแบ่งบรรทัด
นอกจากนี้คุณอาจพิจารณาสิ่งที่คุณกำลังพยายามทำหากคุณจัดรูปแบบข้อความที่มีคนป้อนให้สวยงามคุณอาจพิจารณาตัวกรองเช่นMarkdownเพื่อให้ผู้ใช้ของคุณจัดรูปแบบข้อความโดยไม่ต้องเปิดเวิร์มที่เป็น HTML คุณก็รู้เหมือนอยู่ที่ Stack Overflow
Nope สิ่งที่คุณมีคือทางเลือกที่ใช้กันทั่วไป คำจำกัดความที่คนส่วนใหญ่ใช้คือ:
def nl2br text
text.gsub(/\n/, '<br/>')
end
มันเป็นชื่อที่เป็นเช่นนี้เพราะมันเลียนแบบการทำงานของฟังก์ชั่น PHP โดยใช้ชื่อเดียวกัน
mystring.gsub(/\r\n|\r|\n/, '\n')
ทำงานให้ฉัน
คุณสามารถทำได้simple_format(h(text))
- h
จะตรวจสอบให้แน่ใจว่าไม่มีการแสดง HTML ใด ๆ
ดังที่ได้กล่าวไว้ในคำตอบอื่น ๆ สิ่งนี้จะทำได้มากกว่าที่คุณขอเล็กน้อย จะรวมทุกอย่างไว้ใน<p>
และเพิ่มย่อหน้าเพิ่มเติมหากคุณมีการขึ้นบรรทัดใหม่สองครั้งที่ใดก็ได้