如何编写双引号属性转义erb表达式并获得正确的转义行为?
例如,我想要输出的东西:
value="Hello World"
如果should_print_value
为真,并且假设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 %>">
应该根据should_print_value
插入一个正确转义的myvalue
或一个空字符串(有效地告诉输入为空)。我可能会选择你的方法2,因为我觉得它稍微清晰一些。