2011-11-08 31 views
0

我有一個標題字段的模型。當我發佈到服務器我看到:Rails將'Hello&'保存爲'Hello &'爲什麼?

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

問題是那麼DB被保存爲:

Hello & 

所以後來當我輸出的網站上外地它顯示爲Hello &

處理這個問題的正確方法是什麼?我想輸入&來支持,但同時不允許用戶提交html或js標籤。

由於

+1

你如何發現'&'被保存在數據庫中爲'&'?您是否嘗試過通過'mysql'或'pgsql' CLI直接連接數據庫並查詢表格? – meagar

+0

我們正在使用淨化寶石。 Sanitize.clean(self [column.name],Sanitize :: Config :: RESTRICTED) – AnApprentice

回答

1

Sanitize.clean輸出HTML,而不是純文本所以當然你&符號被轉換爲它們的HTML實體形式(即&)。例如,直接從該fine manual

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

所以,你是,事實上,存儲HTML片段,而不是純文本的碎片。您應該使用

<%= raw @thing.title %> 

顯示您的標題,因爲它們已通過Sanitize呈現爲HTML安全。

+0

Raw?不是html_safe? – AnApprentice

+1

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

+0

謝謝,但不應該使用html_safe? – AnApprentice

相關問題