最近在开发自己的博客,遇到一个问题:富文本怎么存入数据库,表内字段怎么规划?以及怎么知道一个文章里面的图片是那些,在什么位置?

2021-05-29 11:59:06 +08:00
 proxytoworld
2819 次点击
所在节点    问与答
21 条回复
opengps
2021-05-29 12:09:58 +08:00
富文本本身还是字符,不过考虑到这一列数据的长度不确定,使用 text 之类的类型存储,尽可能将内容表配合外键单独一个表存储,不读内容时候不读取这个表
至于图片,其实富文本里只是一个引用路径,实际图片文件存储并不在富文本里,而是在网站相应的目录或者第三方存储里
loading
2021-05-29 12:12:48 +08:00
下载一个 wordpress,装上,学习一下结构就知道了。
富文本最后存下来就是 html,用 text 字段就行了。

建议你用 markdown 呢,时髦一些。
Kaciras
2021-05-29 13:34:23 +08:00
文本就存原始的比如 Markdown,前端拿到后再渲染成 HTML 。
找图片搞个正则扫一遍文章即可。
内容直接存文章表里就行,没必要抠这个性能,你一篇文章能写多少字?
proxytoworld
2021-05-29 13:40:42 +08:00
@loading 打算用 tinymce
shiweiliang
2021-05-29 13:51:46 +08:00
问这些问题,你别做程序员了。
forgottencoast
2021-05-29 15:21:06 +08:00
上面这些人说的都是简单的实现方式。
如果你想研究高大上的,可以研究 Word 是怎么用 xml 来表达的。
aristolochic
2021-05-29 15:47:47 +08:00
上面有人提到 Wordpress,那我来说说 Ruby on Rails 的。Rails 做法是正文放在带有多态关联的独立富文本表,附件表也是多态关联。Rails 集成到什么地步?这些东西开箱即用,在模型里标注就行。这样的好处是富文本和附件逻辑可复用,富文本能够做一些变换比如纯文本化之类的,我之前做搜索高亮就是把纯文本丢给 PostgreSQL,建立全文搜索索引,搜的时候由 PostgreSQL 生成<mark>标签。附件也不是硬编码而是有 Variants 的,比如如果你用对象存储的话可以设置有水印 /无水印、是正文用的高清还是列表用的缩略图,以及一些动态生成下载原图的临时链接啥的(本地文件存储也有)。劣势显而易见就是复杂,如果不是用高集成度的系统帮你处理这些复杂度,或者未来扩展空间不大的话,完全没必要。要说参考的话可以看看 sanitizing 是怎么做的(其实……就是记着做就行)。
falcon05
2021-05-29 15:50:01 +08:00
看看 Wordpress 里的 posts 表,我当时写 cms 时也参考了,有一个 post_content 字段,就是存这个的。
不过它还有一些特殊的 short code,取出渲染到前台时要作一些转换。
LeslieLeung
2021-05-29 18:22:41 +08:00
我前端把 markdown 渲染成 html 存的,图片存在图床,简单快捷
wayne233
2021-05-30 00:20:22 +08:00
我最近使用 notion 记笔记,可以直接导出 html,比 markdown 要丰富好看很多。带图片的话也是用超链接到图片文件位置这样。
呃,希望能对楼主建立博客有点帮助
oneisall8955
2021-05-30 02:06:34 +08:00
丢静态存储 oss,费用很低
NilChan
2021-05-30 06:34:29 +08:00
@shiweiliang 什么鬼,不懂就问,这也能喷?
iozephyr
2021-05-30 06:46:05 +08:00
支持 11 楼说的用对象存储,开源方案可以看看 Ceph 、Minio
matrix67
2021-05-30 09:52:19 +08:00
@LeslieLeung #9 那要更新 md 的时候咋处理 jira 的那个 confluence 好像是这么处理的,只能编辑富文本了
proxytoworld
2021-05-30 12:34:11 +08:00
@wayne233 可以直接用 notion 做博客 但是那就太。。
proxytoworld
2021-05-30 12:34:38 +08:00
@LeslieLeung 敢问用的什么渲染的
LeslieLeung
2021-05-30 17:53:20 +08:00
@matrix67 #14 还是同一个库 可以把 html 再转回去 md
LeslieLeung
2021-05-30 20:49:11 +08:00
@proxytoworld #16 md->html 用的 marked,html->md 用的 turndown,都是 js 的库
proxytoworld
2021-05-31 10:54:10 +08:00
@LeslieLeung 学习了
proxytoworld
2021-05-31 12:30:17 +08:00
@LeslieLeung 你渲染的 html 会存到后端吗

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/779993

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX