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.
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!"
HTMLEntitiesgemme traite des cas tels que ået —qui CGI.unescapeHTMLne 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 hmé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 Nokogiric'est un bon choix.
CGI::escapeHTMLn'é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>
#rawne 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_safecomme 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 %>