在 ERB 中为 rails 插入 HTML 属性损坏?
interpolating HTML attributes in ERB for rails broken?
我想在 html 标签中插入属性 和 其值。
如果我只插入这样的值:
<span b="<%= "1 2 3"%>">
有效,导致:
<span b="1 2 3">
如果我尝试像这样插入属性:
<span <%= "b='1 2 3'" %> >
与之前相同的结果不同,我得到:
<span b="'1" 2="" 3'="">
这是怎么回事?描述此行为的文档在哪里?
更新:
las 示例中的额外引号显然是由浏览器添加的,而不是 ERB,这让我感到困惑。 ERB 将字符串呈现为 <span b="1 2 3">
,因此浏览器假定这意味着 <span b=""1" 2="" 3"="">
,然后解析实体。
你需要深刻理解使用'和"的区别
' 单引号 - 将不作任何解释
"" 双引号 - 解释后才会输出
为了得到你需要的输出,你可以这样编码
<span <%= 'b="1 2 3"' %> >
这里发生的事情是 HTML escaping. In Rails unless you use raw
or String#html_safe
字符串中的实体将被转义,这有助于防止跨站点脚本攻击。
所以如果你这样做:
<span <%= raw "b='1 2 3'" %> >
这将产生预期的输出。但是,如果您创建的 HTML 是高度动态的,则更好的方法是使用 tag
助手。字符串插值往往变得非常冗长且难以阅读。
<%= tag.span(b: "1 2 3") %>
<% end %>
您传递的任何哈希参数都会作为属性添加到标签中。
我想在 html 标签中插入属性 和 其值。 如果我只插入这样的值:
<span b="<%= "1 2 3"%>">
有效,导致:
<span b="1 2 3">
如果我尝试像这样插入属性:
<span <%= "b='1 2 3'" %> >
与之前相同的结果不同,我得到:
<span b="'1" 2="" 3'="">
这是怎么回事?描述此行为的文档在哪里?
更新:
las 示例中的额外引号显然是由浏览器添加的,而不是 ERB,这让我感到困惑。 ERB 将字符串呈现为 <span b="1 2 3">
,因此浏览器假定这意味着 <span b=""1" 2="" 3"="">
,然后解析实体。
你需要深刻理解使用'和"的区别
' 单引号 - 将不作任何解释
"" 双引号 - 解释后才会输出
为了得到你需要的输出,你可以这样编码
<span <%= 'b="1 2 3"' %> >
这里发生的事情是 HTML escaping. In Rails unless you use raw
or String#html_safe
字符串中的实体将被转义,这有助于防止跨站点脚本攻击。
所以如果你这样做:
<span <%= raw "b='1 2 3'" %> >
这将产生预期的输出。但是,如果您创建的 HTML 是高度动态的,则更好的方法是使用 tag
助手。字符串插值往往变得非常冗长且难以阅读。
<%= tag.span(b: "1 2 3") %>
<% end %>
您传递的任何哈希参数都会作为属性添加到标签中。