新手问题 用 Rails 的 Helper raw 显示数据,破坏了 html 格式怎么办?

newbie · 2014年08月22日 · 最后由 xyuanu 回复于 2015年05月29日 · 1883 次阅读

数据库中插入一条这样的数据:

books

|id|content|
|---|---|
|1|</table>|

这样读出来后,在视图曾这样写的时候:

<%= raw book.content %>

就破坏了原来的表格,但还是想把内容直观显示出来,怎么办?

<pre><%= book.content %></pre>

require 'nokogiri'
doc = Nokogiri::HTML::DocumentFragment.parse '<p>text></p></table>'
doc.to_s
# => "<p>text&gt;</p>"

另外,raw 是个安全漏洞 https://ruby-china.org/topics/16633

#1 楼 @luikore 不行,这样把数据直接显示出来了,其他记录比如

id content
2

还是想显示出图片。

#2 楼 @Rei 非常感谢。想想这里要过滤个字段都要用到 nokogiri, 是不是大材小用了?

看了你的帖子,试了下 sanitize 这个方法,基本达到了效果,但 “消毒” 消得把一些字体颜色消掉了,可以忍受。

5楼 已删除

#4 楼 @newbie sanitize 是基于标签名的简单过滤,对结构不纠正,如果有 "

test" 这样的字符串是无视的。

我不觉得是大材小用,工具就是拿来用的,nokogiri 在同类工具中是性能比较好的,另外处理结构要缓存起来避免重复计算。

#6 楼 @Rei 好吧,我将要尝试一下,谢谢你。

建议存数据库之前把这个格式检查好再存,这样取的时候就不用这么麻烦了。

我看 basecamp 是用这个 http://xing.github.io/wysihtml5/

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册