簡體   English   中英

逃避用戶通過Rails應用程序中的文本字段輸入的撇號?

[英]Escaping Apostrophes Input by Users Through Text Fields in a Rails App?

更新:

如果您查看我在下面的更新中粘貼的javascript代碼,則variant.name變量周圍有單引號。 我想我只是在按照教程進行操作。 原來,當我將它們切換為雙引號時,一切正常。 問題:這是一個穩定的解決方案嗎? 還是實現escape_javascript幫助器會更好?

我有一個Rails應用程序,用戶可以在其中輸入字段的值。 然后,其他用戶可以通過從下拉列表中選擇該值來將其添加到他們的配置文件中。 我正在使用collection_select幫助器來呈現下拉列表。 我有一些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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM