Ruby on rails 从rails中的属性中删除所有html标记
我有一个项目模型,它有一些文本属性,一个是摘要。我有一些项目的摘要中有html标记,我想将其转换为纯文本。我有一个方法,它有一个正则表达式,可以删除所有html标记Ruby on rails 从rails中的属性中删除所有html标记,ruby-on-rails,regex,Ruby On Rails,Regex,我有一个项目模型,它有一些文本属性,一个是摘要。我有一些项目的摘要中有html标记,我想将其转换为纯文本。我有一个方法,它有一个正则表达式,可以删除所有html标记 def strip_html_comments_on_data self.attributes.each{|key,value| value.to_s.gsub!(/(<[^>]+>| |\r|\n)/,"")} end 问题是保存项目后html标记仍然存在。我错过了什么 还有,有没有一种真
def strip_html_comments_on_data
self.attributes.each{|key,value| value.to_s.gsub!(/(<[^>]+>| |\r|\n)/,"")}
end
问题是保存项目后html标记仍然存在。我错过了什么
还有,有没有一种真正简单的方法可以在所有模型中调用该方法
谢谢
尼古拉斯·霍克·伊萨未经测试
include ActionView::Helpers::SanitizeHelper
def foo
sanitized_output = sanitize(html_input)
end
其中,html_输入是包含html标记的字符串
编辑
您可以通过作为选项传递:tags=>[]
来剥离所有标记:
plain\u text=sanitize(html\u输入:标记=>[])
虽然我看到有一种更好的方法:
plain\u text=strip\u标签(html\u输入)
然后将其放入before过滤器per,就可以开始了。首先,这里的问题是
数组#每个返回输入数组,而不考虑块内容。我问了两个人一个问题,他们都和我一起查看了数组
第二,除了Array#each
没有真正做你想做的事情之外,我认为你无论如何都不应该这样做。为什么需要在模型的所有属性上运行此方法
最后,为什么不保留用户的HTML输入,并在输出时使用标准的h()
helper
# this will output as plain text
<%=h string_with_html %>
#这将作为纯文本输出
这非常有用,因为您可以查看数据库,并查看用户输入的未修改数据(如果需要)。如果您真的必须在保存值之前转换为纯文本,@zettetic的解决方案让您开始
include ActionView::Helpers::SanitizeHelper
class Comment < ActiveRecord::Base
before_save :sanitize_html
protected
def sanitize_html
self.text = sanitize(text)
end
end
包含ActionView::Helpers::SanitizeHelper
类注释
只需使用Zettetic提到的strip_tags()文本辅助对象最好不要在模型中包含视图辅助对象。只需使用:
HTML::FullSanitizer.new.sanitize(text)
直接引用Rails的消毒剂,而不使用includes
def text
ActionView::Base.full_sanitizer.sanitize(html).html_safe
end
注意:我附加了.html\u以使像
这样的html实体正确呈现。如果存在恶意JavaScript注入的可能性,请不要使用此选项。如果您想删除
以及html标记,可以使用nokogiri
include ActionView::Helpers::SanitizeHelper
def foo
sanitized_output = strip_tags(html_input)
Nokogiri::HTML.fragment(sanitized_output)
end
我不是ruby用户,但那里似乎没有任何任务发生。你在计算一个字符串时去掉了这些东西,但并没有把它们保存在任何地方。@Yuliy ruby有可变字符串!(gsub!是gsub的可变形式——哎呀!)!!!(好的措施)!!!(还有+1让我看得更仔细)我不想对它进行消毒。我想把它们去掉。如果我有hello,我只想储存helloYeah!他说脱掉标签是最好的办法。非常感谢。条带标签不会移除,并且
include ActionView::Helpers::SanitizeHelper
def foo
sanitized_output = strip_tags(html_input)
Nokogiri::HTML.fragment(sanitized_output)
end