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

2016-10-07 01:25:17 +08:00
 makeitall
如何配合 jinja2 使用?正则然后|safe 的话不太安全,毕竟不知道用户输入的是什么。 @livid
2625 次点击
所在节点    Flask
11 条回复
sky101001
2016-10-07 09:54:18 +08:00
我觉得可以先验证下用户的输入,确认是个 url 后直接 img src={{}}
ericls
2016-10-07 10:02:32 +08:00
推荐用 pyquery 这类专门操作 dom 的东西 来操作 dom

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

你为什么要问这个 escape 呢?
makeitall
2016-10-08 09:58:59 +08:00
@ibigbug 谢谢,大致明白了,我还以为要用函数把输入的内容转化后写入数据库呢😂
makeitall
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
2016-10-08 13:15:46 +08:00
这个得具体看了,你试试把默认 escape 关掉?
makeitall
2016-10-08 15:24:03 +08:00
@ibigbug 关掉测试了一遍,发现|e 加了之后自动全部转义,即便|sinaimg 在|e 后面也被转义了。。。说好的管道符呢。。。囧。

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

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

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

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

© 2021 V2EX