[英]How can I strip HTML tags from a string in the model before I get to the view
试图确定如何从Ruby中的字符串中剥离HTML标签。 在进入视图之前,我需要在模型中完成此操作。 因此使用:
ActionView::Helpers::SanitizeHelperstrip_tags()
将无法正常工作。 我一直在寻找使用Nokogiri的方法,但不知道该怎么做。
如果我有一个字符串:
description = <a href="http://google.com">google</a>
我需要将其转换为不包含HTML标记的纯文本,因此它将以“ google”形式出现。
现在,我有以下内容将处理HTML实体:
def simple_description
simple_description = Nokogiri::HTML.parse(self.description)
simple_description.text
end
您可以像这样直接调用消毒器:
Rails::Html::FullSanitizer.new.sanitize('<b>bold</b>')
# => "bold"
还有其他可能有用的消毒剂类:FullSanitizer,LinkSanitizer,Sanitizer,WhiteListSanitizer。
如果您不拥有HTML生成器并且希望减少维护负担,则Nokogiri是一个不错的选择:
require 'nokogiri'
description = '<a href="http://google.com">google</a>'
Nokogiri::HTML::DocumentFragment.parse(description).at('a').text
# => "google"
与使用模式相比,解析器的好处是,解析器通过更改文档的标签或格式来继续工作,而模式却被这些东西绊倒了。
尽管使用解析器要慢一些,但它的易用性和减少的维护工作弥补了这一不足。
上面的代码分解为:
Nokogiri::HTML(description).to_html
# => "<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.0 Transitional//EN\" \"http://www.w3.org/TR/REC-html40/loose.dtd\">\n<html><body><a href=\"http://google.com\">google</a></body></html>\n"
我告诉它不要让Nokogiri添加普通的HTML标头,而是让它仅将一个节点解析为文档片段:
Nokogiri::HTML::DocumentFragment.parse(description).to_html
# => "<a href=\"http://google.com\">google</a>"
at
查找该节点的首次出现:
Nokogiri::HTML::DocumentFragment.parse(description).at('a').to_html
# => "<a href=\"http://google.com\">google</a>"
text
在节点中查找文本。
也许您可以在ruby中使用正则表达式,如下所示
des = '<a href="http://google.com">google</a>'
p des[/<.*>(.*)\<\/.*>/,1]
结果将是“ google”
正则表达式功能强大。
您可以自定义以满足您的需求。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.