[英]string interpolation for double-quoted attribute value in erb
如何編寫雙引號屬性轉義的erb表達式並獲得正確的轉義行為?
例如,我想要將輸出的內容:
value="Hello World"
如果should_print_value
為true,並假設myvalue
= Hello World
編輯 :注意: myvalue
可能包含惡意內容
方法1
如果我嘗試類似
<%= "value=\"#{myvalue}\"" if should_print_value %>
erb將轉義雙引號,從而導致value="Hello
和另一個名為World"=""
屬性
方法2
我想出的最簡單的解決方案是:
<% if should_print_value %>
value="<%= myvalue %>"
<% end %>
但是我仍然對方法1的<%= "value=.... %>
語法是否可行感到好奇。
正如@BroiSatse指出的,請使用:
<%= "value=\"#{myvalue}\"".html_safe if should_print_value %>
或者,我希望在視圖中:
<%= raw "value=\"#{myvalue}\"" if should_print_value %>
這會將內容標記為安全,但是您需要注意myvalue
不是惡意的。 您可以使用CGI.escape
類的方法來正確格式化可能會帶來安全風險的特殊字符。
如果您承諾使用內聯解決方案,則<input ...value="<%= myvalue if should_print_value %>">
應該插入正確轉義的myvalue
或空字符串(有效地告訴輸入為空),具體取決於should_print_value
。 我可能會選擇您的方法2,因為我覺得它更清晰一些。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.