在属性哈希中转义HAML

我有一个类似于我在stackoverflow上发现的问题,但不完全相同。 我想避免解决以下问题:

https://stackoverflow.com/a/10407782/996587

基本上,想要以下HTML输出:

<div class='myclass' extraattr='UNESCAPED & CONTENT'> Content... 

我使用的HAML看起来像这样:

 .myclass{ "extraattr" => "UNESCAPED & CONTENT" } Content... 

我无法弄清楚如何让内容以我想要的方式输出。 尝试将.html_safe应用到字符串的末尾,但收到以下错误:

未定义的方法`html_safe’代表“UNESCAPED &CONTENT”:字符串

后来意识到,对于这个特定的应用程序,我不使用Rails,只是ruby + HAML。 (我inheritance了这个项目,我只是开始学习HAML,ruby和Rails)

而且,对于那些懒得单击链接并且没有阅读我提到的解决方案的人,我宁愿不将HAML配置为不为整个文件转义attrs,只是为了这个属性。

谢谢!

UPDATE

我刚刚找到了:普通filter,并且能够得到我想要的东西。 但是,如果有一个技巧我不知道所以我不必写所有的HTML,我会很感激。 我的“修复”:

 :plain <div class='myclass' extraattr='UNESCAPED & CONTENT'> Content... 

(目前)没有任何方法可以在Rails之外的Haml中关闭单个属性的转义,使用:escape_attrs选项可以全部或全部。 根据您的需要,可能值得查看:once选项 。

当在Rails中使用Haml时,它会将html转义方法替换为一些尊重ActiveSupport添加的html_safe值的方法(请参阅lib/haml/helpers/xss_mods.rb )。

如果需要,可以在Rails之外使用这些方法。 你需要添加html_safehtml_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... 

输出:

 
Content...

您是否尝试使用\来转义字符。

{ :myattr => '\<\>\&' }

Interesting Posts