我有一个与我在堆栈溢出中发现的问题相似的问题,但不是完全相同。我想避免以下问题的解决办法:
https://stackoverflow.com/a/10407782/996587
基本上,希望获得以下HTML输出:
<div class='myclass' extraattr='UNESCAPED <>& CONTENT'>
Content...
</div>
我使用的HAML如下所示:
.myclass{ "extraattr" => "UNESCAPED <>& CONTENT" }
Content...
我不太清楚如何让内容以我想要的方式输出。尝试将.html_safe应用于字符串的末尾,但得到了以下错误:
用于“`html_safe <>& CONTENT”的未定义方法<>&:String
后来意识到,对于这个特定的应用程序,我不使用Rails,只使用ruby + HAML。(我继承了这个项目,我刚刚开始学习HAML、ruby和Rails )
同样,对于那些懒得点击链接并且没有阅读我提到的解决方案的人来说,我不希望配置HAML来避免整个文件的吸引,而仅仅是这个属性。
谢谢!
更新
我刚刚找到了:普通过滤器,并且能够用它得到我想要的。但是,如果有一个技巧我不知道,所以我不需要写所有的HTML,我会感激它。我的“解决办法”:
:plain
<div class='myclass' extraattr='UNESCAPED <>& CONTENT'>
Content...
</div>
发布于 2013-05-17 12:04:25
在Rails之外的Haml中,没有(目前)任何方法关闭单个属性的转义,而是使用:escape_attrs
选项。根据您想要的内容,它可能值得一看 option。
当在Rails中使用Haml时,它会将html转义方法替换为一些尊重html_safe
添加的ActiveSupport值的方法(参见lib/haml/helpers/xss_mods.rb
)。
如果您愿意,可以在Rails之外使用这些方法。您需要将html_safe
和html_safe?
方法添加到String类中才能工作(这里要小心,这个示例只是Rails提供的完整XSS保护的“可怜的人”版本,它不会真正保护您不受太多的影响,但它将允许对属性进行选择性转义)。
在需要Haml之后的某个位置添加以下内容(可能最好在需要它自己的文件中添加):
class String
def html_safe?
defined?(@html_safe) && @html_safe
end
def html_safe
@html_safe = true
self
end
end
require 'haml/helpers/xss_mods'
module Haml::Helpers
include Haml::Helpers::XssMods
end
现在您可以在您的字符串上使用html_safe
,而Haml不会转义它们:
.myclass{ "extraattr" => "UNESCAPED <>& CONTENT".html_safe,
"otherextraattr" => "ESCAPED <>& CONTENT"}
Content...
输出:
<div class='myclass' extraattr='UNESCAPED <>& CONTENT' otherextraattr='ESCAPED <>& CONTENT'>
Content...
</div>
发布于 2013-05-16 14:45:22
您是否尝试过使用\
来转义字符。
{ :myattr => '\<\>\&' }
https://stackoverflow.com/questions/16596659
复制