[英]Escaping Apostrophes Input by Users Through Text Fields in a Rails App?
escape_javascript
幫助器會更好?
問題在於某些用戶正在輸入包含撇號的值。 Firebug告訴我撇號破壞了javascript。 當我手動刪除所有撇號進行測試時,javascript可以正常運行。
今天早些時候,我問了一個有關在呈現的html文本中轉義與號的問題,現在我知道您使用了<%= h%>。 根據我在網絡上閱讀的內容,<%= h%>不能用撇號引起來。 如果我錯了,並且<%= h%>確實轉義了撇號,那么我不確定如何使用collection_select來實現它,因為我已經嘗試了多種組合,但是它們都不起作用。
這是創建下拉菜單的代碼行:
<%= season_form.collection_select :variety_id, Variety.find(:all), :id, :name, :prompt => "Optional: Variety" %>
謝謝!
這是我的JavaScript。 我有商品的等級制度。 通過解釋的方式:這個javascript讓我的用戶從下拉列表中選擇一種產品,然后自動將第二個下拉列表限制為僅屬於用戶選擇的任何產品的那些品種。 只要品種名稱中沒有撇號,它就可以很好地工作。
另外,我嘗試在幾乎所有元素的前面添加escape_javascript,但沒有一個能夠解決問題。 該幫助器上不存在Rails文檔,因此在示例方面沒有太多要做。 謝謝你的幫助!
var varieties = new Array(); <% for variety in @varieties -%> varieties.push(new Array(<%= variety.product_id %>, '<%=h variety.name %>', <%= variety.id %>)); <% end -%> function collectionSelected(e) { product_id = e.getValue(); options = e.next(1).options; options.length = 1; varieties.each(function(variety) { if (variety[0] == product_id) { options[options.length] = new Option(variety[1], variety[2]); } }); }
編輯:
我只是意識到您不應該逃避服務器端代碼。 您應該轉義javascript代碼。 有關javascript轉義功能,請參見此處: http : //www.w3schools.com/jsref/jsref_escape.asp
您應該使用在api中找到的escape_javascript(): http ://api.rubyonrails.org/classes/ActionView/Helpers/JavaScriptHelper.html#M001758
您可以使用gsub並替換所需的內容。
我通常使用選擇幫助器並將其傳遞給我。我不認為collection_select使用它。
Variety.all.collect{|v| [v.id, v.name.gsub("'", "\'")]}
對於collection_select,可以在使用記錄之前對其進行“修復”。
varieties = Variety.all.map{|v| v.name.gsub("'", "\'")}
collection_select(:variety_id, varieties, :id, :name, :prompt => "Optional: Variety")
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.