Как мне кодировать / декодировать HTML-объекты в Ruby? - PullRequest
187 голосов
/ 21 октября 2009

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

У меня есть старый драгоценный камень ( html_helpers ), но, похоже, он был заброшен дважды.

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

Ответы [ 7 ]

278 голосов
/ 21 октября 2009

Для кодирования символов вы можете использовать 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>' %>
145 голосов
/ 06 марта 2011

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!"
35 голосов
/ 18 декабря 2014

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

Примеры:

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!"
35 голосов
/ 21 ноября 2010

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

<%= raw '<html>' %>

Итак,

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

будет выводить

<br>
8 голосов
/ 06 декабря 2011

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

Hpricot.uxs "foo&nbsp;b&auml;r"
=> "foo bär"
0 голосов
/ 01 января 2015
<% str="<h1> Test </h1>" %>

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

<%= CGI.unescapeHTML(str).html_safe %>
0 голосов
/ 03 декабря 2013

Вы можете использовать htmlascii драгоценный камень:

Htmlascii.convert string
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...