首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在属性哈希中取消转义HAML

在属性哈希中取消转义HAML
EN

Stack Overflow用户
提问于 2013-05-16 20:15:57
回答 2查看 1.6K关注 0票数 7

我有一个与我在堆栈溢出中发现的问题相似的问题,但不是完全相同。我想避免以下问题的解决办法:

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

基本上,希望获得以下HTML输出:

代码语言:javascript
代码运行次数:0
运行
复制
<div class='myclass' extraattr='UNESCAPED <>& CONTENT'>
    Content...
</div>

我使用的HAML如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
.myclass{ "extraattr" => "UNESCAPED <>& CONTENT" }
  Content...

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

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

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

同样,对于那些懒得点击链接并且没有阅读我提到的解决方案的人来说,我不希望配置HAML来避免整个文件的吸引,而仅仅是这个属性。

谢谢!

更新

我刚刚找到了:普通过滤器,并且能够用它得到我想要的。但是,如果有一个技巧我不知道,所以我不需要写所有的HTML,我会感激它。我的“解决办法”:

代码语言:javascript
代码运行次数:0
运行
复制
:plain
  <div class='myclass' extraattr='UNESCAPED <>& CONTENT'>
    Content...
  </div>
EN

回答 2

Stack Overflow用户

发布于 2013-05-17 20:04:25

在Rails之外的Haml中,没有(目前)任何方法关闭单个属性的转义,而是使用:escape_attrs选项。根据您想要的内容,它可能值得一看 option

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

如果您愿意,可以在Rails之外使用这些方法。您需要将html_safehtml_safe?方法添加到String类中才能工作(这里要小心,这个示例只是Rails提供的完整XSS保护的“可怜的人”版本,它不会真正保护您不受太多的影响,但它将允许对属性进行选择性转义)。

在需要Haml之后的某个位置添加以下内容(可能最好在需要它自己的文件中添加):

代码语言:javascript
代码运行次数:0
运行
复制
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不会转义它们:

代码语言:javascript
代码运行次数:0
运行
复制
.myclass{ "extraattr" => "UNESCAPED <>& CONTENT".html_safe,
          "otherextraattr" => "ESCAPED <>& CONTENT"}
  Content...

输出:

代码语言:javascript
代码运行次数:0
运行
复制
<div class='myclass' extraattr='UNESCAPED <>& CONTENT' otherextraattr='ESCAPED &lt;&gt;&amp; CONTENT'>
  Content...
</div>
票数 6
EN

Stack Overflow用户

发布于 2013-05-16 22:45:22

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

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16596659

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档