Я пытаюсь декодировать некоторые объекты HTML, например '<'
, становясь '<'
.
У меня есть старый драгоценный камень (html_helpers), но он, кажется, был оставлен дважды.
Любые рекомендации? Мне нужно будет использовать его в модели.
Я пытаюсь декодировать некоторые объекты HTML, например '&lt;'
, становясь '<'
.
У меня есть старый драгоценный камень (html_helpers), но он, кажется, был оставлен дважды.
Любые рекомендации? Мне нужно будет использовать его в модели.
HTMLEntities может сделать это:
: [email protected]; sudo gem install htmlentities
Successfully installed htmlentities-4.2.4
: [email protected]; 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!"
Чтобы закодировать символы, вы можете использовать CGI.escapeHTML
:
string = CGI.escapeHTML('test "escaping" <characters>')
Чтобы декодировать их, есть CGI.unescapeHTML
:
CGI.unescapeHTML("test "unescaping" <characters>")
Конечно, перед этим вам нужно включить библиотеку CGI:
require 'cgi'
И если вы находитесь в Rails, вам не нужно использовать CGI для кодирования строки. Там метод h
.
<%= h 'escaping <html>' %>
Для декодирования символов в Rails используйте:
<%= raw '<html>' %>
Итак,
<%= raw '<br>' %>
выводит
<br>
Я думаю, Nokogiri gem также является хорошим выбором. Он очень стабилен и имеет огромное сообщество.
Примеры:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
или
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
Если вы не хотите добавлять новую зависимость только для этого (например, HTMLEntities
), и вы уже используете Hpricot
, он может как сбежать, так и unescape для вас. Он обрабатывает гораздо больше, чем CGI
:
Hpricot.uxs "foo bär"
=> "foo bär"
Вы можете использовать htmlascii
gem:
Htmlascii.convert string
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>