我有一些类似,我对计算器发现一个问题,但并不完全一样。 我想,以避免解决以下问题:
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>
没有(目前)没有办法关闭逃逸在Haml的Rails的之外的个体属性,它是一个使用全有或全无:escape_attrs
选项。 根据你想要的东西,它可能是值得考虑的:once
选择 。
当Haml的Rails中被使用,它取代了的HTML逸出一些尊重方法html_safe
值的ActiveSupport增加(见lib/haml/helpers/xss_mods.rb
)。
这是可能的,如果你想用Rails之外这些方法。 您将需要添加html_safe
和html_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 <>& CONTENT'>
Content...
</div>