ruby - 在属性哈希中转义 HAML

标签 ruby 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 应用于字符串的末尾,但出现以下错误:

“UNESCAPED <>& CONTENT”的未定义方法 `html_safe':String

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

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

谢谢!

更新

我刚刚找到了 :plain 过滤器,并且能够使用它获得我想要的东西。但是,如果有我不知道的技巧,那么我就不必编写所有的 HTML,我将不胜感激。我的“修复”:

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

最佳答案

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

当在 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...

输出:

<div class='myclass' extraattr='UNESCAPED <>& CONTENT' otherextraattr='ESCAPED &lt;&gt;&amp; CONTENT'>
  Content...
</div>

关于ruby - 在属性哈希中转义 HAML,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16596659/

相关文章:

ruby-on-rails - 如何使用 has_and_belongs_to_many 为数据库做种

javascript - 如果用户未登录,则 Rails jquery 弹出窗口

haml - Markdown 内部的 Handlebars ,HAML 内部

javascript打字机不打印单词

javascript - HAML 中的 JS 中的 Ruby : what's the syntax?

ruby - 为什么括号内的换行符会改变算术结果?

ruby - 如何将数组转换为哈希 : integer count

ruby - 太阳黑子:无法在文本字段上使用 "order_by"?

ruby-on-rails - 可以在erb中嵌入markdown吗?

ruby - ruby 数组的最后一个元素为 nil