Apakah ada cara Railsy untuk mengubah \ n menjadi <br>
?
Saat ini, saya melakukannya seperti ini:
mystring.gsub(/\n/, '<br>')
Apakah ada cara Railsy untuk mengubah \ n menjadi <br>
?
Saat ini, saya melakukannya seperti ini:
mystring.gsub(/\n/, '<br>')
Jawaban:
Ya, rel memiliki simple_format
yang melakukan apa yang Anda cari, dan sedikit lebih baik karena juga menambahkan tag paragraf. Lihat
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Contoh:
simple_format(mystring)
Perhatikan bahwa simple_format
memungkinkan tag HTML dasar, tetapi juga meneruskan teks sanitize
yang akan menghapus semua skrip, jadi harus aman untuk masukan pengguna.
simple_format
secara otomatis membungkus teks yang disediakan dalam <p>
tag, dan fungsi ini tidak dapat dihindari.
javascript:alert(\no!\)
diberikan dalam referensi. Mungkin ada variasi yang tak ada habisnya dan variasi masa depan untuk digunakan oleh peretas jahat.
wrapper_tag
opsi yang memungkinkan untuk mengubah <p>
tag untuk hal lain
Anda dapat membuatnya lebih umum dengan melakukan:
mystring.gsub(/(?:\n\r?|\r\n?)/, '<br>')
Dengan cara ini Anda akan mencakup DOS, * NIX, Mac dan akhiran baris tidak valid yang tidak disengaja.
simple_format
Anda dapat memisahkan regex tersebut, gunakan map
untuk membungkus string dalam p
tag pembuka dan penutup , lalu gabungkan. mystring.split(/(?:\n\r?|\r\n?)/).map {|s| "<p>#{s}</p>"}.join
harus melakukannya, meskipun saya tidak mengujinya.
<%= sanitize(planning.benefits.split(/(?:\n\r?|\r\n?)/).map {|x| "<li class='collection-item'>#{x}</li>"}.join) %>
. Dan itu bekerja seperti pesona boohoo!
mystring
bisa berisi HTML sembarangan.
Anda harus berhati-hati dengan ini ketika Anda berurusan dengan input pengguna.
simple_format
menyisipkan <br>
tag tetapi itu akan memungkinkan tag html lainnya !
Saat menggunakan simple_format, <b>Hello</b>
akan ditampilkan sebagai " Halo ", Anda mungkin tidak menginginkan ini.
Sebagai gantinya Anda dapat menggunakan <%= h(c.text).gsub("\n", "<br>").html_safe %>
h()
akan menyandikan html terlebih dahulu, gsub
menggantikan jeda baris dan html_safe
memungkinkan <br>
tag untuk ditampilkan.
Ini akan menampilkan dengan tepat apa yang dimasukkan pengguna. Ini juga memungkinkan untuk mendiskusikan html di misalnya komentar.
simple_format
mengizinkan tag HTML dasar, penting untuk diperhatikan bahwa tag ini juga melewati teks sanitize
, yang menghapus apa pun yang berpotensi berbahaya. apidock.com/rails/ActionView/Helpers/TextHelper/simple_format
Cukup gunakan
white-space: pre-line;
di css dan teks Anda akan dibungkus saat jeda baris.
Anda juga dapat mempertimbangkan apa yang Anda coba lakukan - jika Anda memformat teks dengan baik yang telah dimasukkan orang, Anda dapat mempertimbangkan filter seperti Markdown untuk memungkinkan pengguna Anda memformat teks mereka tanpa membuka kaleng worm yang merupakan HTML. Anda tahu, seperti yang ada di Stack Overflow.
Nggak. Apa yang Anda miliki di sana adalah alternatif yang umum digunakan. Definisi yang digunakan kebanyakan orang adalah:
def nl2br text
text.gsub(/\n/, '<br/>')
end
Dinamakan demikian karena meniru fungsionalitas fungsi PHP dengan nama yang sama .
mystring.gsub(/\r\n|\r|\n/, '\n')
bekerja untuk saya
Anda dapat melakukannya simple_format(h(text))
- ini h
akan memastikan HTML apa pun tidak ditampilkan.
Seperti yang disebutkan dalam jawaban lain, ini akan melakukan lebih dari yang Anda minta. Ini membungkus semuanya <p>
, dan menambahkan lebih banyak paragraf jika Anda memiliki baris baru ganda di mana saja.