2011-11-08 2 views
0

J'ai un modèle avec un champ de titre. Lorsque je poste au serveur que je vois:Rails sauve un titre avec 'Hello &' comme 'Hello &' pourquoi?

Parameters: {"utf8"=>"✓", "authenticity_token"=>"3Le7aLitPd6MzWFeB0ofI9wk1IuhybNswjG9N+KgJJc=", "poll"=>{"title"=>"Hello &"}} 

problème est le DB économise alors comme:

Hello & 

plus tard quand je sortie le champ sur le site, il apparaît comme Hello &

Quelle est la bonne façon de gérer cela? Je veux entrer & pour être pris en charge mais en même temps ne pas permettre aux utilisateurs de soumettre des balises html ou js.

Merci

+1

Comment découvrez-vous que '&' est enregistré dans la base de données en tant que '&'? Avez-vous essayé de vous connecter directement à la base de données via l'interface CLI 'mysql' ou' pgsql' et d'interroger la table? – meagar

+0

Nous utilisons la gemme Sanitize. Sanitize.clean (self [column.name], Sanitize :: Config :: RESTRICTED) – AnApprentice

Répondre

1

Sanitize.clean sorties HTML, pas le texte brut si bien sûr vos esperluette sont convertis en leur forme d'entité HTML (à savoir &). Par exemple, directement à partir du la fine manual:

Sanitize.clean(html, Sanitize::Config::RESTRICTED) # => '<b>foo</b>'

Alors vous êtes, en fait, des extraits HTML magasin plutôt que des morceaux de texte brut. Vous devez utiliser

<%= raw @thing.title %> 

pour afficher vos titres car ils ont déjà été rendus HTML-safe par Sanitize.

+0

Raw? pas html_safe? – AnApprentice

+1

@AnApprentice: http://api.rubyonrails.org/classes/ActionView/Helpers/OutputSafetyHelper.html#method-i-raw –

+0

Merci, mais ne devrais-je pas utiliser html_safe? – AnApprentice