使用rails自带方法去除html标签

来源:互联网 发布:mac桌面文件路径 编辑:程序博客网 时间:2024/05/23 19:29

最近需要导出富文本文章到excel(GEM:spreadsheet),数据库存的带有html标签和图片,需要只导出必要的文本,所以有了这个需求

其实直接编写一个正则表达式可以解决这个问题,但是重复造轮子是没必要的,在查找rails api (我用的rails4.2+)时,找到了

ActionView::Helpers::SanitizeHelper sanitize()

这个方法在view中会经常使用但是它有两个问题

先说第一个不能过滤全部html标签,这是因为这个方法本身是用来防止注入攻击的。
然后找到了

ActionView::Helpers::SanitizeHelper strip_tags()

看似不错但是像 “\r, \t, \n”之类的还是没有删除,如何去除这些格式符,正则可以用但别忘了DRY原则,rails自己就有一个方法

String < Object squish()

squish拓展了String 提供合并两端空格并清除ASCII 和 Unicode的 whitespace。

之前说有二个问题,问题就是:strip_tags()功能是不错但是它是ActionView的helper方法,属于MVC中的V,而我们处理内容一般在M中也有逻辑简单的在C中,如何调用V层的method在M、C中使用?
简单暴力用法直接include

include ActionView::Helpers::SanitizeHelper

现在是可以直接使用方法了,但是引出了另一个问题,破坏了原有的模型封装,更有可能引起方法冲突
在ruby中可以使用单例类解决

def method_name  @helper ||= Class.new do    include ActionView::Helpers::SanitizeHelper  end.newend

最终使用

method_name.strip_tags(string_content).squish

当然这只是针对很少使用的情况, code for fun。

原创粉丝点击