如何编写双引号属性转义的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=.... %>
语法。
答案 0 :(得分:2)
正如@BroiSatse指出的那样,要么使用:
<%= "value=\"#{myvalue}\"".html_safe if should_print_value %>
或者,我希望在观点中看到:
<%= raw "value=\"#{myvalue}\"" if should_print_value %>
这会将内容标记为安全,但您需要注意myvalue
不是恶意的。您可以使用CGI.escape
之类的方法正确格式化可能存在安全风险的特殊字符。
答案 1 :(得分:1)
如果您致力于内联解决方案,则<input ...value="<%= myvalue if should_print_value %>">
应插入正确转义的myvalue
或空字符串(有效地告知输入为空),具体取决于should_print_value
。我可能只是选择你的方法2,因为我觉得它更清晰。