Estoy tratando de decodificar algunas entidades HTML, como el '<'
devenir '<'
.
Tengo una gema antigua ( html_helpers ) pero parece que la abandoné dos veces.
¿Alguna recomendación? Necesitaré usarlo en un modelo.
Estoy tratando de decodificar algunas entidades HTML, como el '&lt;'
devenir '<'
.
Tengo una gema antigua ( html_helpers ) pero parece que la abandoné dos veces.
¿Alguna recomendación? Necesitaré usarlo en un modelo.
Respuestas:
HTMLEntities puede hacerlo:
: 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!"
HTMLEntities
gema se ocupa de casos como å
y —
que CGI.unescapeHTML
no.
Para codificar los caracteres, puede usar CGI.escapeHTML
:
string = CGI.escapeHTML('test "escaping" <characters>')
Para decodificarlos, hay CGI.unescapeHTML
:
CGI.unescapeHTML("test "unescaping" <characters>")
Por supuesto, antes de eso debes incluir la biblioteca CGI:
require 'cgi'
Y si estás en Rails, no necesitas usar CGI para codificar la cadena. Ahí está el h
método.
<%= h 'escaping <html>' %>
Creo que la gema Nokogiri también es una buena opción. Es muy estable y tiene una gran comunidad contribuyente.
Muestras:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
o
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTML
tal vez no pueda resolver algunos casos. Por otro lado, si necesita un conjunto completo de soporte, estoy seguro de que Nokogiri
es una buena opción.
CGI::escapeHTML
no se escapa de los caracteres alemanes como äöüß, y tal vez más ... Con Nokogiri aún no lo comprobé, pero esto sería un punto a favor.
Para decodificar caracteres en Rails use:
<%= raw '<html>' %>
Entonces,
<%= raw '<br>' %>
saldría
<br>
#raw
No decodifica nada. Le dice a la vista que no codifique la cadena. Lo hace envolviendo la cadena en a ActiveSupport::SafeBuffer
, que a su vez tiene una bandera ( html_safe?
), establecida en verdadero. La vista usa este indicador para determinar que la cadena se puede inyectar directamente en el HTML sin escapar. Me gusta pensar html_safe
que el programador indica que la cadena en cuestión ya se ha escapado correctamente.
Si no desea agregar una nueva dependencia solo para hacer esto (como HTMLEntities
) y ya lo está utilizando Hpricot
, puede escapar y no escapar por usted. Maneja mucho más que CGI
:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>