我一直在努力弄清楚如何使用Rails消毒剂。它似乎没有像我预期的那样工作。认为我误解了一些东西。
基本上,我尝试清理除divs
以外的所有divs
,其属性值为highlight
。但是,例如,我试图在它上面使用PermitScrubber
。
我设置了我的标签和属性,并且继承自PermitScrubber,但它仍然擦除了我允许的标签和属性:
class ExampleScrubber < Rails::Html::PermitScrubber
def initialize
super
self.tags = %w(img),
self.attributes = %w(src alt)
end
# commented out for the example, but what I'm trying to ultimately do
# def allowed_node?(node)
# node.name == "div" && node.attributes.values.first.value = "highlight"
# end
end
@comment.body = "<ul>\n<li>yes</li>\n<li>tests</li>\n</ul>\n\n<p><img src=\"something.jpeg\" alt=\"something\"></p>\n"
ActionController::Base.helpers.sanitize(
@comment.body,
scrubber: ExampleScrubber.new
)
#=> "\nyes\ntests\n\n\n\n"
所以有两件事:
1.为什么要清除img
代码以及src
和alt
属性?
2.我知道我可以重构allowed_node?
方法,但我想先弄清楚第一位。
感谢您阅读✌️
答案 0 :(得分:2)
第一个问题(“为什么[此]清除 switch (item)
{
case "Color":
fruitData.Description = fruitDetails.Color;
break;
case "Price":
fruitData.Description = fruitDetails.Price;
break;
case "Nutrient":
fruitData.Description = fruitDetails.Nutrient;
break;
default:
break;
}
标记以及img
和src
属性?”)是由数组后的逗号逗号引起的。
alt
TIL Ruby不需要数组的方括号:
# Here v
self.tags = %w(img),
因此,该逗号将您的a = "b", "c" # => ["b", "c"]
转换为数组数组:
tags
导致问题并允许清除标记。删除逗号会使事情正常工作:
ExampleScrubber.new.tags # => [["img"], ["src", "alt"]]
为了实现您的目标,只保留class ExampleScrubber < Rails::Html::PermitScrubber
def initialize
super
self.tags = %w(img)
self.attributes = %w(src alt)
end
# commented out for the example, but what I'm trying to ultimately do
# def allowed_node?(node)
# node.name == "div" && node.attributes.values.first.value = "highlight"
# end
end
body = "<ul>\n<li>yes</li>\n<li>tests</li>\n</ul>\n\n<p><img src=\"something.jpeg\" alt=\"something\"></p>\n"
ActionController::Base.helpers.sanitize(body, scrubber: ExampleScrubber.new)
# => "\nyes\ntests\n\n\n<img src=\"something.jpeg\" alt=\"something\">\n"
,并且只有当他们拥有包含“突出显示”一词的属性(任何属性)时,您才可以尝试以下内容:
divs