【问题标题】:How to transform some Blaze `Html` before rendering it with Yesod?如何在使用 Yesod 渲染之前转换一些 Blaze `Html`?
【发布时间】:2015-10-01 02:03:41
【问题描述】:

我有一些用户输入的 HTML,显示在 Yesod 模板中。我想转换这个 HTML,在它被渲染之前去掉它的 style 属性,但我不知道怎么做。

如果我的模板包含#{ html },我可以通过函数将html 作为值传递,只需编写#{ transform html },如果transform 函数具有签名:transform :: Html -> Html,其中Html 是定义的类型blaze-htmlhere。我看到的问题是 Blaze 似乎没有公开有用的功能来遍历 HTML 树,甚至只是获取给定Html 的后代。那么你会建议哪些策略呢?我应该尝试进入 Blaze 内部吗?

我不确定这是否应该被视为纯粹是 Blaze 的问题。转换Html元素不是Blaze的主要用例之一,所以这个问题需要在使用Yesod渲染的上下文中解决

【问题讨论】:

    标签: haskell yesod blaze-html


    【解决方案1】:

    您必须先渲染到 Text 或 ByteString,blaze 不提供分析内容的方法。然后,您可以使用 html-conduit 或 tagsoup 之类的库处理数据(xss-sanitize 就是这样做的)。

    【讨论】:

    • 谢谢,这让我觉得在页面呈现时执行这种转换是个坏主意。我宁愿在将内容存储到数据库之前对其进行清理
    猜你喜欢
    • 1970-01-01
    • 2017-11-16
    • 2016-04-30
    • 2015-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多