繁体   English   中英

在进入视图之前,如何从模型的字符串中剥离HTML标签

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM