V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
kukala
V2EX  ›  程序员

遇到个好笑的事

  •  
  •   kukala · 2022-08-01 21:58:15 +08:00 via Android · 6409 次点击
    这是一个创建于 824 天前的主题,其中的信息可能已经有所发展或是发生改变。
    小项目一般用富文本编辑器把内容存入数据库不是带有着 html 标签的嘛!

    需求是提取出来的内容不带 html 标签的!



    请问大家会选择如下哪个操作:

    1 、建立 2 个字段,一个存带 html 标签的内容,一个存不带 html 的内容

    2 、取出数据然后替换掉 html 标签
    45 条回复    2022-08-03 23:25:41 +08:00
    kingjpa
        1
    kingjpa  
       2022-08-01 22:05:16 +08:00   ❤️ 3
    这时候 php 的好处就出来了 直接一个 strip_tags 函数搞定。
    wzzzx
        2
    wzzzx  
       2022-08-01 22:08:57 +08:00
    我肯定是选 2 ,这个就是一个业务上的需求吧。今儿不要标签,明儿要标签,后天想把标签加粗展示,大后天想把标签变为红色,总不能一次整多一个字段吧
    eason1874
        3
    eason1874  
       2022-08-01 22:12:32 +08:00
    大部分富文本编辑器都有两个保存 API ,一个存 HTML 格式的,一个存文本格式的,并且两者可以互转

    文本格式也只是类似 markdown 去掉部分 HTML 标签,不能全部去掉。比如允许编辑字体颜色,保存时如果把 HTML 标签全部去了,那你就转不回来了
    oneisall8955
        4
    oneisall8955  
       2022-08-01 22:12:36 +08:00 via Android
    2 ,jsoup 解析整一下
    BugCry
        5
    BugCry  
       2022-08-01 22:12:59 +08:00 via Android   ❤️ 12
    这要从何笑起呢
    kukala
        6
    kukala  
    OP
       2022-08-01 22:18:27 +08:00 via Android
    @BugCry 你会选哪个
    kkeep
        7
    kkeep  
       2022-08-01 22:19:22 +08:00 via Android
    2
    kukala
        8
    kukala  
    OP
       2022-08-01 22:20:08 +08:00 via Android
    @eason1874 你再仔细看下题
    kukala
        9
    kukala  
    OP
       2022-08-01 22:21:01 +08:00 via Android
    @oneisall8955 是的
    kukala
        10
    kukala  
    OP
       2022-08-01 22:21:14 +08:00 via Android
    @kingjpa 的确
    eason1874
        11
    eason1874  
       2022-08-01 22:38:15 +08:00
    @kukala 哦,你的意思是,在有 HTML 版本的同时要不要另外存一个文字版本是吧,那我选 2
    Danswerme
        12
    Danswerme  
       2022-08-01 22:52:12 +08:00
    选 1 ,我懒
    kukala
        13
    kukala  
    OP
       2022-08-01 23:00:36 +08:00 via Android
    @eason1874 对头,是这样的
    kukala
        14
    kukala  
    OP
       2022-08-01 23:00:56 +08:00 via Android
    @Danswerme 这是懒的问题吗?
    DeutschXP
        15
    DeutschXP  
       2022-08-02 02:33:38 +08:00 via iPhone
    @kukala 那你有没有想过,在某些应用情景下,单独存一个不带 html 标签的纯文本,会更方便搜索呢?
    netnr
        16
    netnr  
       2022-08-02 08:46:26 +08:00 via Android
    选 1 直接存储 更通用
    murmur
        17
    murmur  
       2022-08-02 09:02:31 +08:00
    @DeutschXP 全文搜索用 solar 这些,也不需要你在数据库里存,要存分词的结果
    imicksoft
        18
    imicksoft  
       2022-08-02 09:02:38 +08:00
    选 1 ,这事我干过。
    我之前采集过 aardio 论坛的帖子,aardio 的数据类型有一个是 table 类型,那存 html 不方便搜索 aardio 代码,所以就用了两个字段,一个存 html 源码,一个存纯文本。
    yuewenjie
        19
    yuewenjie  
       2022-08-02 09:04:43 +08:00
    嘿嘿
    kukala
        20
    kukala  
    OP
       2022-08-02 09:15:56 +08:00 via Android
    @DeutschXP 这个应用场景下,你有实践过没
    kukala
        21
    kukala  
    OP
       2022-08-02 09:16:45 +08:00 via Android
    @netnr 存储的时候就已经处理了,不是多此一举吗
    kukala
        22
    kukala  
    OP
       2022-08-02 09:19:53 +08:00 via Android
    @imicksoft 只是选了个方便你的方法,并不是最优选择
    fengci
        23
    fengci  
       2022-08-02 09:33:02 +08:00
    @DeutschXP 正常搜索引擎有去 html 过滤。这不是问题。
    hay313955795
        24
    hay313955795  
       2022-08-02 09:45:39 +08:00
    额 哪里好笑了?
    cuixiao603
        25
    cuixiao603  
       2022-08-02 09:57:31 +08:00
    我是来看笑话的,笑话呢
    f056917
        26
    f056917  
       2022-08-02 10:23:31 +08:00
    选 2 丢给前端去替换?
    nothingistrue
        27
    nothingistrue  
       2022-08-02 10:36:30 +08:00
    首先考虑的问题是,不带 html 的内容是不是必须存,评判标准是:有没有根据它检索的需求。如果是必须存那就没 2 的什么事了。如果不是必须存,那 1 跟 2 在黑盒功能上是没区别的,用哪个就看你用哪个更方便。
    ada87
        28
    ada87  
       2022-08-02 11:56:02 +08:00
    哪里好笑了, 正常一点的富文本都是存自己的 rawObject ,从没存过 HTML , 这个需求要是要求存 HTML 才有毛病。
    theliang
        29
    theliang  
       2022-08-02 12:02:33 +08:00
    2
    第一个是用空间换时间
    第二个是直接花时间去替换,如果不是很大的文本,其实效率也是挺快的
    littlewing
        30
    littlewing  
       2022-08-02 12:05:57 +08:00
    1. 哪里好笑了
    2. “小项目一般用富文本编辑器把内容存入数据库不是带有着 html 标签的嘛!” 这是什么逻辑
    RuralHunter
        31
    RuralHunter  
       2022-08-02 12:08:12 +08:00
    显然 2 个方案都不对,实际只要保存带标签的 html 。因为不需要标签时你可以把带标签内容取出来去掉标签。但你去掉了标签保存就恢复不了原来的标签了,除非你的标签是固定的。
    BugCry
        32
    BugCry  
       2022-08-02 12:32:19 +08:00 via Android
    @kukala 2 ,除非需求方同意把富文本编辑器改成纯文本编辑器
    octalempyrean
        33
    octalempyrean  
       2022-08-02 12:35:06 +08:00 via Android   ❤️ 1
    反正我没笑
    laolaowang
        34
    laolaowang  
       2022-08-02 13:21:25 +08:00
    这有什么可笑的?
    fox0001
        35
    fox0001  
       2022-08-02 13:22:07 +08:00 via Android
    一般选 1 ,省心
    Rrrrrr
        36
    Rrrrrr  
       2022-08-02 13:35:36 +08:00
    自己定义一套不更好?
    alfa
        37
    alfa  
       2022-08-02 13:39:41 +08:00
    小项目,之前我们用了 1 ,因为内容需要按关键字搜索
    ccyu220
        38
    ccyu220  
       2022-08-02 13:44:36 +08:00
    有什么好笑的,之前做 APP 消息中心的时候就是这么处理的显示部分简介和详情的。

    简介就是纯文本,详情就是 webview 展示详细内容
    mosliu
        39
    mosliu  
       2022-08-02 14:42:40 +08:00
    看数据量 和 时间要求了。。
    第一个 空间换时间
    第二个 时间换空间呗。。。
    DeutschXP
        40
    DeutschXP  
       2022-08-02 17:04:07 +08:00 via iPhone
    @murmur 还是出现了,为了防杠,特别说了,某些应用场景。还分词,轻量情况下,犯得着另外上复杂的东西么?瞧把你能耐的,本来 5 块钱的 VPS 就能解决的,给你搞得非要花 500 块,你这样的 IT 很 JS 啊……

    @kukala n 年前实践过,许多论坛和 CMS 系统都会同时存两个版本,便于搜索,这么玩还是从国外那些系统传到国内的。

    除了搜索需要,再举例一个,类似上面提到的消息通知,包括 Email ,都存在同时需要富文本和纯文本的需求。
    lujiaosama
        41
    lujiaosama  
       2022-08-02 17:11:43 +08:00
    为什么会存带 html 标签的, 我这里的富文本是存的楼上说的 rawObject, 也有过前端展示简介纯文本的需求, 是服务端这边提取的文本. 如果还要搜索, 确实还是 ls 说的再加一个字段存纯文本比较好.
    libook
        42
    libook  
       2022-08-02 17:41:21 +08:00
    得看需求上,要求带样式的内容在“不带 html 标签”的场景下怎么处理,如果只去掉 html 标签就能满足需求的话,我倾向方案 2 。

    方案 1 需要确保一致性,解决一致性问题通常会麻烦一些,我个人的偏好是能存一份数据尽量不存多份。
    krixaar
        43
    krixaar  
       2022-08-03 15:34:00 +08:00
    方案 1 的变种,建一个视图,多一个字段用原表字段去掉 html 标签
    encro
        44
    encro  
       2022-08-03 19:10:00 +08:00
    orm 里面这种不是有接近标准的解决方案吗?

    Post {
    html, # 数据库存原始的
    getContent(), # 定义一个 get 取去掉 tag 的
    }

    以上是不考虑性能的,如果需要考虑性能,一直性用 text ,比如搜索引擎,那么当然是加字段。根据场景和需求来,否则就是耍流氓。
    sanyuedev
        45
    sanyuedev  
       2022-08-03 23:25:41 +08:00
    内部使用的(管理系统)存取原始信息,对外展示的 转义为 html 形式的
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1004 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 20:10 · PVG 04:10 · LAX 13:10 · JFK 16:10
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.