如何从字符串中删除 HTML 标记
Posted
技术标签:
【中文标题】如何从字符串中删除 HTML 标记【英文标题】:How to remove HTML markup from string 【发布时间】:2013-02-21 12:05:12 【问题描述】:假设我有:
@string = "it is a <a href="#">string</a>"
我想以两种方式在我的应用程序的不同部分使用它:
带有可点击的链接 没有可点击的链接(但不显示任何 html 标记)第一个可以使用html_safe
:
@string.html_safe
这是一个string
我怎样才能实现第二个?
这是一个字符串。
【问题讨论】:
可能重复:***.com/questions/7414267/… 【参考方案1】:你可以试试这个:
ActionView::Base.full_sanitizer.sanitize(@string)
见strip_tags(html)。
【讨论】:
【参考方案2】:你可以试试这个:
strip_tags(@string)
【讨论】:
【参考方案3】:用于一般用途(例如网络爬虫):
puts Rails::Html::FullSanitizer.new.sanitize("<div>Hello</div><br>")
# Hello
【讨论】:
【参考方案4】:您可以使用nokogiri
来做同样的事情。
SO post 讲述了这个故事。
简而言之:
这使用了 XPath 的 starts-with
函数:
你必须先这样定义它:
require 'nokogiri'
item = Nokogiri::HTML('<a href="#">string</a>')
puts item.to_html
上面将给出 html 输出。然后你可以使用 XPath。
item.search('//a[not(starts-with(@href, "http://"))]').each do |a|
a.replace(a.content)
end
puts item.to_html
【讨论】:
【参考方案5】:在 Rails 中,另见 strip_tags 方法。 http://api.rubyonrails.org/classes/ActionView/Helpers/SanitizeHelper.html#method-i-strip_tags
【讨论】:
【参考方案6】:Rails 提供了一个名为strip_links
的方法,它似乎可以做你想做的事(看它的名字)。
根据its APIDock page 有点受限。要使其适用于/任何字符串,您可以扩展字符串类:
class String
def strip_links
ActionController::Base.helpers.strip_links(self)
end
end
所以你可以使用:
@string.strip_links
【讨论】:
如果字符串没有 html 标记,strip_links 会给出错误。扩展该方法不会产生错误,但不适用于某些标记,例如 。不过还是谢谢。 哦...我认为/假设您的字符串中总是有一个链接...我猜sanitize
method 删除了所有 HTML...(它在同一个 Helper 模块中)跨度>
【参考方案7】:
受楼上的启发,我在我的项目中定义了这个函数
def delete_html_markup(data)
return data if data.blank?
if data.is_a?(Array)
data.map | s | delete_html_markup(s)
elsif data.is_a?(Hash)
data.each do | k, v |
data[k] = delete_html_markup(v)
end
else
ActionView::Base.full_sanitizer.sanitize(data)
end
end
【讨论】:
这并没有提供问题的答案。一旦你有足够的reputation,你就可以comment on any post;相反,provide answers that don't require clarification from the asker。 - From Review以上是关于如何从字符串中删除 HTML 标记的主要内容,如果未能解决你的问题,请参考以下文章