J'essaie de décoder certaines entités HTML, comme '<'
devenir '<'
.
J'ai un vieux bijou ( html_helpers ) mais il semble avoir été abandonné deux fois.
Des recommandations? Je devrai l'utiliser dans un modèle.
J'essaie de décoder certaines entités HTML, comme '&lt;'
devenir '<'
.
J'ai un vieux bijou ( html_helpers ) mais il semble avoir été abandonné deux fois.
Des recommandations? Je devrai l'utiliser dans un modèle.
Réponses:
Les HTMLEntities peuvent le faire:
: 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
gemme traite des cas tels que å
et —
qui CGI.unescapeHTML
ne le font pas.
Pour encoder les caractères, vous pouvez utiliser CGI.escapeHTML
:
string = CGI.escapeHTML('test "escaping" <characters>')
Pour les décoder, il y a CGI.unescapeHTML
:
CGI.unescapeHTML("test "unescaping" <characters>")
Bien sûr, avant cela, vous devez inclure la bibliothèque CGI:
require 'cgi'
Et si vous êtes dans Rails, vous n'avez pas besoin d'utiliser CGI pour encoder la chaîne. Voilà la h
méthode.
<%= h 'escaping <html>' %>
Je pense que le joyau de Nokogiri est également un bon choix. Il est très stable et possède une énorme communauté de contribution.
Échantillons:
a = Nokogiri::HTML.parse "foo bär"
a.text
=> "foo bär"
ou
a = Nokogiri::HTML.parse "¡I'm highly annoyed with character references!"
a.text
=> "¡I'm highly annoyed with character references!"
CGI.escapeHTML
être pas résoudre certains cas. D'un autre côté, si vous avez besoin d'un support complet, je suis sûr que Nokogiri
c'est un bon choix.
CGI::escapeHTML
n'échappe pas aux personnages allemands comme äöüß, et peut-être plus ... Avec Nokogiri, je n'ai pas encore vérifié, mais ce serait un avantage.
Pour décoder des caractères dans Rails, utilisez:
<%= raw '<html>' %>
Alors,
<%= raw '<br>' %>
sortirait
<br>
#raw
ne décode rien. Il indique à la vue de ne pas coder la chaîne. Pour ce faire, il encapsule la chaîne dans un ActiveSupport::SafeBuffer
, qui à son tour a un indicateur ( html_safe?
), défini sur true. La vue utilise cet indicateur pour déterminer que la chaîne peut être injectée directement dans le code HTML sans être échappée. J'aime à considérer html_safe
comme une indication par le programmeur que la chaîne en question a déjà été correctement échappée.
Si vous ne voulez pas ajouter une nouvelle dépendance juste pour faire cela (comme HTMLEntities
) et que vous l'utilisez déjà Hpricot
, elle peut à la fois s'échapper et s'échapper pour vous. Il gère bien plus que CGI
:
Hpricot.uxs "foo bär"
=> "foo bär"
<% str="<h1> Test </h1>" %>
result: < h1 > Test < /h1 >
<%= CGI.unescapeHTML(str).html_safe %>