【发布时间】:2015-03-23 22:49:07
【问题描述】:
如何编写双引号属性转义的 erb 表达式并获得正确的转义行为?
例如,我想要一些会输出的东西:
value="Hello World"
如果should_print_value 为真,并假设myvalue = Hello World
编辑:注意:myvalue 可能包含恶意内容
方法 1
如果我尝试类似
<%= "value=\"#{myvalue}\"" if should_print_value %>
erb 将转义双引号,导致 value=&quotHello 和另一个名为 World&quot="" 的属性
方法 2
我想出的最简单的解决方案是:
<% if should_print_value %>
value="<%= myvalue %>"
<% end %>
但我仍然很好奇是否可以使用方法 1 的 <%= "value=.... %> 语法。
【问题讨论】:
-
试试
"value=\"#{myvalue}\"".html_safe。你想达到什么目的?可能有更简单的方法。 -
忘记说明了,
myvalue是不可信的,可能包含恶意XSS内容,所以.html_safe是不能接受的 -
回答您的问题,我只是尝试有条件地将
value属性添加到 erb 模板中的 HTML 元素(以及其他条件属性)。在我的例子中,它是一个文本输入标签。
标签: ruby-on-rails templates erb template-engine