【发布时间】:2015-01-23 09:52:23
【问题描述】:
我正在尝试清理 Solr 搜索结果,因为它里面有 html 标签:
ActionController::Base.helpers.sanitize( result_string )
清理未突出显示的字符串很容易,例如:I know <ul><li>ruby</li> <li>rails</li></ul>。
但是当结果被突出显示时,我在里面有额外的重要标签 - <em> 和 </em>:
I <em>know</em> <<em>ul</em>><<em>li</em>><em>ruby</em></<em>li</em>> <<em>li</em>><em>rails</em></<em>li</em>></<em>ul</em>>.
因此,当我使用嵌套的 html 和突出显示标签对字符串进行清理时,我会得到带有 htmls 标签的字符串。这很糟糕:)
如何清理带有<em> 标签的突出显示字符串以获得正确的结果(仅限带有<em> 标签的字符串)?
我找到了路,但它很慢而且不漂亮:
string = 'I <em>know</em> <<em>ul</em>><<em>li</em>><em>ruby</em></<em>li</em>> <<em>li</em>><em>rails</em></<em>li</em>></<em>ul</em>>'
['p', 'ul', 'li', 'ol', 'span', 'b', 'br'].each do |tag|
string.gsub!( "<<em>#{tag}</em>>", '' )
string.gsub!( "</<em>#{tag}</em>>", '' )
end
string = ActionController::Base.helpers.sanitize string, tags: %w(em)
我怎样才能优化它或使用更好的解决方案呢?
编写一些正则表达式并删除 html_tags,但保留 <em> 和 </em> 例如
请帮忙,谢谢。
【问题讨论】:
-
我可能不太理解您的问题,但我认为您应该指定要清理的内容以及要清理的内容,而不是通过选项值: ActionController::Base.helpers.sanitize( result_string, tags: %w(em) )
标签: ruby regex gsub html-sanitizing