新手问题 将 HTML 保存到数据库,怎样让页面显示不显示代码,而显示效果

waitingaminute · 2014年04月02日 · 最后由 ywjno 回复于 2014年04月02日 · 4500 次阅读

在保存的时候将样式神马的都保存到数据库了,取出在页面显示的时候怎样才能显示效果而不显示保存的代码 比如下边这个,怎样才能不显示代码。

女人不是妖

 

性感不是骚

 

 

爱美之心没有什么大不了

<%== html %>

#1 楼 @lululau 试了下报错,我用<%=debug(@content)%>,页面显示数据库取出的是这样的数据

--- "<p>\r\n\
\t\xE5\xA5\xB3\xE4\xBA\xBA\xE4\xB8\x8D\xE6\x98\xAF\xE5\xA6\x96</p>\r\n\
<p>\r\n\
\t&nbsp;</p>\r\n\
<h1>\r\n\
\t\xE6\x80\xA7\xE6\x84\x9F\xE4\xB8\x8D\xE6\x98\xAF\xE9\xAA\x9A</h1>\r\n\
<h2>\r\n\
\t&nbsp;</h2>\r\n\
<p class=\"ui-lrc-sentence\" style=\"margin: 0px; padding: 0px; text-align: center;\">\r\n\
\t&nbsp;</p>\r\n\
<p class=\"ui-lrc-sentence\" style=\"margin: 0px; padding: 0px;\">\r\n\
\t\xE7\x88\xB1\xE7\xBE\x8E\xE4\xB9\x8B\xE5\xBF\x83\xE6\xB2\xA1\xE6\x9C\x89\xE4\xBB\x80\xE4\xB9\x88\xE5\xA4\xA

然后等到页面显示,显示的是:

女人不是妖

性感不是骚

#3 楼 @miclle html 倒是隐藏了,但是样式什么的都是乱的

#3 楼 @leomayleomay sample 这个也是 html 隐藏了,但是样式什么的都是乱的

这种乱糟糟的数据真是不忍卒睹。不要图快图省事,wordpress style 不可取。

长久的办法是把数据和样式分开。内容是内容,样式是样式,两者完全不是一种东西。你可以在内容中允许一些简单的 semantic html, 比如<strong>, <em>,但仅此而已,如果用其他的 parser 比如 markdown,bbcode 更好。

如果你在这种现有的数据上修修补补,就是在给自己累积麻烦。不合适的设计最终会咬伤你的。

<%=raw html -%>

#7 楼 @billy 这是一个项目维护,以前是这么写的,我现在只能打补丁,补裤子,但是不能把人家裤子给拆了,再做。。。。。。

@waitingaminute 理解,同情。

<%= sanitize html, attributes: %w(id class style) %>

html_safe,raw 如果显示不对,那是你当前页面的 style 影响的。这只能是页面样式的权重不对,调整你的样式吧

#12 楼 @hxplove01 发现了正在解决,样式 h1 和字体的 h1 他俩冲突了,正在想办法

css 样式尽量要设计规范,互不影响。定义属于自己的 scope。render 出来的 html 的样式也是一样。 都是小问题,一个 div wrap 起来 html,就可以了。祝好运 ;)

#14 楼 @hxplove01 好运就没有了,我调查完了就头疼了,那个 h1 样式是个全局的,n 多地方用到,疯了

又来了,《别用 raw 和 html_safe》http://ruby-china.org/topics/16633

#15 楼 @waitingaminute 一般都是把所有标签全局定义一个样式,然后在局部定义样式。 你 db 里的 html 应该有一个局部的 css 样式定义。做一个容器,用来 wrap db 里的 html,然后在把 css 修改成这个容器底下 dom 应用。

用 ifream 来嵌入好了,

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