Saya mencoba memecahkan kode beberapa entitas HTML, seperti '&lt;'menjadi '<'.
Saya memiliki permata lama ( html_helpers ) tetapi tampaknya telah ditinggalkan dua kali.
Ada rekomendasi? Saya perlu menggunakannya dalam model.
Saya mencoba memecahkan kode beberapa entitas HTML, seperti '&lt;'menjadi '<'.
Saya memiliki permata lama ( html_helpers ) tetapi tampaknya telah ditinggalkan dua kali.
Ada rekomendasi? Saya perlu menggunakannya dalam model.
Jawaban:
HTMLEntities dapat melakukannya:
: jmglov@laurana; sudo gem install htmlentities
Successfully installed htmlentities-4.2.4
: jmglov@laurana; irb
irb(main):001:0> require 'htmlentities'
=> []
irb(main):002:0> HTMLEntities.new.decode "¡I'm highly annoyed with character references!"
=> "¡I'm highly annoyed with character references!"
HTMLEntitiespermata menangani kasus-kasus seperti ådan —yang CGI.unescapeHTMLtidak.
Untuk menyandikan karakter, Anda dapat menggunakan CGI.escapeHTML:
string = CGI.escapeHTML('test "escaping" <characters>')
Untuk memecahkan kode mereka, ada CGI.unescapeHTML:
CGI.unescapeHTML("test "unescaping" <characters>")
Tentu saja, sebelum itu Anda perlu memasukkan perpustakaan CGI:
require 'cgi'
Dan jika Anda menggunakan Rails, Anda tidak perlu menggunakan CGI untuk menyandikan string. Itu hmetodenya.
<%= h 'escaping <html>' %>
Saya pikir permata Nokogiri juga merupakan pilihan yang baik. Ini sangat stabil dan memiliki komunitas yang berkontribusi besar.
Sampel:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
atau
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTMLmungkin tidak dapat menyelesaikan beberapa kasus. Di sisi lain, jika Anda membutuhkan dukungan penuh, saya yakin Nokogiriini adalah pilihan yang baik.
CGI::escapeHTMLtidak luput dari karakter Jerman seperti äöüß, dan mungkin lebih ... Dengan Nokogiri saya belum memeriksanya, tetapi ini akan menjadi nilai tambah.
Untuk mendekode karakter dalam Rails gunakan:
<%= raw '<html>' %>
Begitu,
<%= raw '<br>' %>
akan menghasilkan
<br>
#rawtidak memecahkan kode apa pun. Ini memberitahu pandangan untuk tidak menyandikan string. Ini dilakukan dengan membungkus string dalam ActiveSupport::SafeBuffer, yang pada gilirannya memiliki flag ( html_safe?), disetel ke true. Tampilan menggunakan bendera ini untuk menentukan bahwa string dapat disuntikkan langsung ke dalam HTML tanpa melarikan diri. Saya suka menganggap html_safesebagai indikasi oleh programmer bahwa string tersebut telah benar-benar lolos.
Jika Anda tidak ingin menambahkan dependensi baru hanya untuk melakukan ini (seperti HTMLEntities) dan Anda sudah menggunakan Hpricot, itu bisa melarikan diri dan menghapus untuk Anda. Ini menangani lebih dari CGI:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>