在属性散列中消除HAML

我有一个类似于我在stackoverflow上找到的一些问题,但不完全一样。 我想避免解决以下问题:

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'为“UNESCAPED <>&CONTENT”:字符串

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

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

谢谢!

UPDATE

我只是找到了:简单的过滤器,并能够得到我想用的东西。 但是,如果有一个技巧我不知道,所以我不必编写所有的HTML,我会很感激。 我的“修复”:

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

目前还没有任何方法可以关闭Rails以外的Haml中的单个属性的转义,使用:escape_attrs选项将全部或全部:escape_attrs 。 根据你想要的,可能值得看一下:once选项。

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

如果您愿意,可以在Rails之外使用这些方法。 你将需要添加html_safehtml_safe? 方法为了这个工作(在这里要小心,这个例子只是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 &lt;&gt;&amp; CONTENT'>
  Content...
</div>

你有没有试过用来逃避角色。

{ :myattr => '<>&' }

链接地址: http://www.djcxy.com/p/71495.html

上一篇: Unescaping HAML in an Attribute Hash

下一篇: Where m flag and o flag will be stored in Linux