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

flask 如何实现类似 V2EX 的发一个图片地址自动变为<img>html 标签的形式?

  •  
  •   makeitall · 2016-10-07 01:25:17 +08:00 · 2734 次点击
    这是一个创建于 2999 天前的主题,其中的信息可能已经有所发展或是发生改变。
    如何配合 jinja2 使用?正则然后|safe 的话不太安全,毕竟不知道用户输入的是什么。 @livid
    11 条回复    2016-10-08 15:24:03 +08:00
    sky101001
        1
    sky101001  
       2016-10-07 09:54:18 +08:00 via iPad   ❤️ 1
    我觉得可以先验证下用户的输入,确认是个 url 后直接 img src={{}}
    ericls
        2
    ericls  
       2016-10-07 10:02:32 +08:00   ❤️ 1
    推荐用 pyquery 这类专门操作 dom 的东西 来操作 dom

    最后 再用 白名单过一次就好了
    cheetah
        3
    cheetah  
       2016-10-07 10:40:25 +08:00 via iPhone
    为什么要 | safe ?
    ibigbug
        4
    ibigbug  
       2016-10-07 17:37:48 +08:00   ❤️ 1
    makeitall
        5
    makeitall  
    OP
       2016-10-07 18:15:19 +08:00 via iPhone
    @ibigbug 谢谢
    makeitall
        6
    makeitall  
    OP
       2016-10-08 00:16:40 +08:00 via iPhone
    @ibigbug 对 tornado 不太熟,这个是在哪里能引用这个函数,还有就是 html escape 在那里?
    ibigbug
        7
    ibigbug  
       2016-10-08 03:39:28 +08:00   ❤️ 1
    @makeitall 跟 jinja 的 filter 同样原理。 https://github.com/livid/v2ex/blob/c8af57e2d2c4c8701901fb346cc98a4cde13b54b/tpl/portion/topic_content.html#L1 在这里有引用到,也有 escape ,不过跟图片地址转换无关。

    你为什么要问这个 escape 呢?
    makeitall
        8
    makeitall  
    OP
       2016-10-08 09:58:59 +08:00 via iPhone
    @ibigbug 谢谢,大致明白了,我还以为要用函数把输入的内容转化后写入数据库呢😂
    makeitall
        9
    makeitall  
    OP
       2016-10-08 13:01:35 +08:00
    @ibigbug 还有一个问题,我用{{ content | sinaimg }}的时候发现 html 代码都被 escape 了,然后我加入了一个 e ,{{ content | e | sinaimg }}发现还是全被 escape 了。请问这两个为什么不是后面的 sinaimg 不被 escape 呢?然后我现在的解决办法是只能自定义一个 escape 然后加 safe{{ content | newescape | sinaimg | safe }},然后才能保证用户输入 html 代码的时候能够被 escape 掉。感觉这样很麻烦,有没有更好的办法?
    ibigbug
        10
    ibigbug  
       2016-10-08 13:15:46 +08:00 via iPhone   ❤️ 1
    这个得具体看了,你试试把默认 escape 关掉?
    makeitall
        11
    makeitall  
    OP
       2016-10-08 15:24:03 +08:00
    @ibigbug 关掉测试了一遍,发现|e 加了之后自动全部转义,即便|sinaimg 在|e 后面也被转义了。。。说好的管道符呢。。。囧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5977 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:35 · PVG 10:35 · LAX 18:35 · JFK 21:35
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.