2011-04-21 105 views
7

我正在使用以下幫助程序函數,但它似乎將我的JavaScript語句中的所有特殊字符轉換爲HTML實體,使其無法使用並損壞。有什麼建議麼?防止rails將特殊字符轉換爲HTML實體

def link_to_add_fields(name, f, association) 
    new_object = f.object.class.reflect_on_association(association).klass.new 
    fields = f.fields_for(association, new_object, :child_index => "new_#{association}") do |builder| 
     render(association.to_s + "_fields", :f => builder) 
    end 
    link_to_function(name, h("add_fields(this, \"#{association}\", \"#{escape_javascript(fields)}\")")) 
    end 

上面產生像這樣的鏈接(注意轉換次數$amp; - "等:

<a href="#" onclick="add_fields(this, &amp;quot;skills&amp;quot;, &amp;quot;&amp;lt;label for=\&amp;quot;user_skills_attributes_new_skills_name\&amp;quot;&amp;gt;Skill&amp;lt;\/label&amp;gt;\n&amp;lt;input data-autocomplete=\&amp;quot;/users/autocomplete_skills_vocab_name\&amp;quot; id=\&amp;quot;user_skills_attributes_new_skills_name\&amp;quot; name=\&amp;quot;user[skills_attributes][new_skills][name]\&amp;quot; size=\&amp;quot;30\&amp;quot; type=\&amp;quot;text\&amp;quot; /&amp;gt;&amp;lt;br /&amp;gt;\n&amp;lt;input id=\&amp;quot;user_skills_attributes_new_skills__destroy\&amp;quot; name=\&amp;quot;user[skills_attributes][new_skills][_destroy]\&amp;quot; type=\&amp;quot;hidden\&amp;quot; value=\&amp;quot;false\&amp;quot; /&amp;gt;&amp;lt;a href=\&amp;quot;#\&amp;quot; onclick=\&amp;quot;remove_fields(this); return false;\&amp;quot;&amp;gt;remove&amp;lt;\/a&amp;gt;&amp;quot;); return false;">Add a Skill</a> 

EDIT/

想通了 - 對於導軌3除去H2S()

+2

你複製它不知道它是如何工作的?提示:h()是做什麼的? – 2011-04-21 12:21:02

+0

非常誠實,我使用的是Railscasts插曲中的代碼:http://railscasts.com/episodes/197-nested-model-form-part-2我刪除了h(),現在它可以工作嗎?我很困惑,爲什麼它被用在Railscast中...... – stewart715 2011-04-21 12:21:59

+0

Bleh,我認爲這是一個Rails 3問題 - 感謝Mark的那個快速修復.. – stewart715 2011-04-21 12:24:35

回答

7

在Rails 2中,默認情況下輸出沒有被轉義,h()方法是這樣做的:在Rails 2的視圖中,您經常會看到以下內容:

<%=h @object.field %> 

但是,在Rails 3中,輸出現在默認已經轉義。你不再需要h()方法。爲了獲得非轉義輸出,你必須使用原始方法。

的更多信息,請訪問:http://railscasts.com/episodes/204-xss-protection-in-rails-3

所以基本上你的情況,你看Rails的2碼和去除H(中)是需要更新爲Rails 3

相關問題