V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
proxytoworld
V2EX  ›  问与答

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

  •  
  •   proxytoworld · 2021-05-29 11:59:06 +08:00 · 2824 次点击
    这是一个创建于 1280 天前的主题,其中的信息可能已经有所发展或是发生改变。
    21 条回复    2021-05-31 17:43:37 +08:00
    opengps
        1
    opengps  
       2021-05-29 12:09:58 +08:00
    富文本本身还是字符,不过考虑到这一列数据的长度不确定,使用 text 之类的类型存储,尽可能将内容表配合外键单独一个表存储,不读内容时候不读取这个表
    至于图片,其实富文本里只是一个引用路径,实际图片文件存储并不在富文本里,而是在网站相应的目录或者第三方存储里
    loading
        2
    loading  
       2021-05-29 12:12:48 +08:00
    下载一个 wordpress,装上,学习一下结构就知道了。
    富文本最后存下来就是 html,用 text 字段就行了。

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