Apakah ada cara Railsy untuk mengubah \ n menjadi <br>
?
Saat ini, saya melakukannya seperti ini:
mystring.gsub(/\n/, '<br>')
ruby-on-rails
ruby
daustin777
sumber
sumber
Jawaban:
Ya, rel memiliki
simple_format
yang melakukan apa yang Anda cari, dan sedikit lebih baik karena juga menambahkan tag paragraf. Lihathttp://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
Contoh:
Perhatikan bahwa
simple_format
memungkinkan tag HTML dasar, tetapi juga meneruskan tekssanitize
yang akan menghapus semua skrip, jadi harus aman untuk masukan pengguna.sumber
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 lainAnda dapat membuatnya lebih umum dengan melakukan:
Dengan cara ini Anda akan mencakup DOS, * NIX, Mac dan akhiran baris tidak valid yang tidak disengaja.
sumber
simple_format
Anda dapat memisahkan regex tersebut, gunakanmap
untuk membungkus string dalamp
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 danhtml_safe
memungkinkan<br>
tag untuk ditampilkan.Ini akan menampilkan dengan tepat apa yang dimasukkan pengguna. Ini juga memungkinkan untuk mendiskusikan html di misalnya komentar.
sumber
simple_format
mengizinkan tag HTML dasar, penting untuk diperhatikan bahwa tag ini juga melewati tekssanitize
, yang menghapus apa pun yang berpotensi berbahaya. apidock.com/rails/ActionView/Helpers/TextHelper/simple_formatCukup gunakan
di css dan teks Anda akan dibungkus saat jeda baris.
sumber
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.
sumber
Nggak. Apa yang Anda miliki di sana adalah alternatif yang umum digunakan. Definisi yang digunakan kebanyakan orang adalah:
Dinamakan demikian karena meniru fungsionalitas fungsi PHP dengan nama yang sama .
sumber
bekerja untuk saya
sumber
Anda dapat melakukannya
simple_format(h(text))
- inih
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.sumber