如何告诉Rails不对字符串中的特殊字符进行编码?

时间:2011-01-13 19:49:38

标签: ruby-on-rails ruby ruby-on-rails-3

我有这个:

"<img src='#{picture.url(:tiny)}'>"

输出如下:

 &lt;img src='/system/pictures/2/tiny/Womacdsf.jpg?1294942797'&gt;, &lt;img src='/system/pictures/3/tiny/Womacdsf_3017.jpg?1294942797'&gt;, &lt;img src='/system/pictures/4/tiny/Womacdsf_8012.jpg?1294942797'&gt;, … (8)

如您所见,这是使用&lt;&gt;进行编码,而不是使用原始<>

我怎么能告诉Rails这不是我想要的?

3 个答案:

答案 0 :(得分:4)

使用

<%= image_tag picture.url(:tiny) %>

应该有效

对于您的问题,您也可以使用此

"<img src='#{picture.url(:tiny)}'>".html_safe

答案 1 :(得分:2)

如果您使用的是Rails 3,则默认情况下会启用XSS保护。这意味着默认情况下会转义HTML。

您可能曾经使用“h”帮助程序生成转义HTML,您不再需要,而是需要使用“原始”帮助程序来防止转义。

请参阅http://asciicasts.com/episodes/204-xss-protection-in-rails-3

答案 2 :(得分:2)

您有两种选择。打印时使用raw取消转义字符串

<% image_string = "<img src='#{picture.url(:tiny)}'>" %>
<%= raw image_string %>

或者您可以将字符串标记为html_safe

<% image_string = "<img src='#{picture.url(:tiny)}'>".html_safe %>
<%= image_string %>