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

html ruby

136665 просмотра

7 ответа

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

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

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

Автор: Kostas Источник Размещён: 12.11.2019 09:24

Ответы (7)


148 плюса

Решение

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!"
Автор: Ivailo Bardarov Размещён: 06.03.2011 02:19

285 плюса

Для кодирования символов вы можете использовать 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>' %>
Автор: Damien MATHIEU Размещён: 21.10.2009 12:46

40 плюса

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

Образцы:

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!"
Автор: Hoang Le Размещён: 18.12.2014 08:27

35 плюса

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

<%= raw '<html>' %>

Так,

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

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

<br>
Автор: memonk Размещён: 20.11.2010 09:59

8 плюса

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

Hpricot.uxs "foo&nbsp;b&auml;r"
=> "foo bär"
Автор: Jason L Perry Размещён: 06.12.2011 06:13

0 плюса

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

Htmlascii.convert string
Автор: kartouch Размещён: 03.12.2013 09:04

-5 плюса

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

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

<%= CGI.unescapeHTML(str).html_safe %>
Автор: Usman Размещён: 01.01.2015 11:47
Вопросы из категории :
32x32