在属性哈希进行反向转义HAML(Unescaping HAML in an Attribute Ha

2019-09-03 20:21发布

我有一些类似,我对计算器发现一个问题,但并不完全一样。 我想,以避免解决以下问题:

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”:字符串

后来意识到,对于这个特定的应用,我不使用Rails,只是红宝石+ HAML。 (我继承了这个项目,我刚开始学习HAML,红宝石和Rails反正)

再次,对于那些你懒得点击链接并没有读过我提到的解决方案,我宁愿不配置HAML到无法逃脱ATTRS整个文件,只为这一个属性。

谢谢!

UPDATE

我刚刚发现的:普通过滤嘴,并能得到我想要的东西使用。 但是,如果有一招,我不知道,所以我没有写所有的HTML,我将不胜感激。 我的“修复”:

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

Answer 1:

没有(目前)没有办法关闭逃逸在Haml的Rails的之外的个体属性,它是一个使用全有或全无:escape_attrs选项。 根据你想要的东西,它可能是值得考虑的:once选择 。

当Haml的Rails中被使用,它取代了的HTML逸出一些尊重方法html_safe值的ActiveSupport增加(见lib/haml/helpers/xss_mods.rb )。

这是可能的,如果你想用Rails之外这些方法。 您将需要添加html_safehtml_safe? 方法String类,为了这个工作(这里要小心,这个例子仅仅是一个“穷人的”全XSS保护Rails所提供的版本,它不会真正保护你多少,但它会允许选择性转义的属性)。

添加下面的某个地方需要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>


Answer 2:

您是否尝试过使用\逃脱字符。

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



文章来源: Unescaping HAML in an Attribute Hash
标签: ruby haml