Как кодировать / декодировать HTML-объекты в Ruby?

Я пытаюсь декодировать некоторые HTML-объекты, такие как '&amp;lt;' становится '<'.

у меня есть старый гем (html_helpers) но, кажется, он был оставлен дважды.

какие рекомендации? Мне нужно будет использовать его в модели.

7 ответов


функция htmlentities можете сделать это:

: 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 "&iexcl;I&#39;m highly&nbsp;annoyed with character references!"
=> "¡I'm highly annoyed with character references!"

для кодирования символов можно использовать CGI.escapeHTML:

string = CGI.escapeHTML('test "escaping" <characters>')

чтобы расшифровать их, есть CGI.unescapeHTML:

CGI.unescapeHTML("test &quot;unescaping&quot; &lt;characters&gt;")

конечно, перед этим вам нужно включить библиотеку CGI:

require 'cgi'

и если вы находитесь в Rails, вам не нужно использовать CGI для кодирования строки. Есть h метод.

<%= h 'escaping <html>' %>

для декодирования символов в Rails используйте:

<%= raw '<html>' %>

и

<%= raw '&lt;br&gt;' %>

выводит

<br>

Я думаю nokogiri gem также хороший выбор. Она очень стабильна и имеет огромное сообщество.

примеры:

a = Nokogiri::HTML.parse "foo&nbsp;b&auml;r"    
a.text 
=> "foo bär"

или

a = Nokogiri::HTML.parse "&iexcl;I&#39;m highly&nbsp;annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"

если вы не хотите добавлять новую зависимость, просто сделайте это (например,HTMLEntities) и вы уже используете Hpricot, он может как бежать, так и unescape для вас. Он обрабатывает гораздо больше, чем CGI:

Hpricot.uxs "foo&nbsp;b&auml;r"
=> "foo bär"

можно использовать htmlascii gem:

Htmlascii.convert string

<% str="<h1> Test </h1>" %>

result: &lt; h1 &gt; Test &lt; /h1 &gt;

<%= CGI.unescapeHTML(str).html_safe %>