2015-09-30 30 views
1

我有一些用戶輸入的HTML顯示在Yesod模板中。我想轉換這個HTML,在它被渲染之前從它上面剝離出style屬性,但是我找不到如何。如何在使用Yesod進行渲染之前轉換某些Blaze`Html`?

如果我的模板包含#{ html }我可以通過html作爲值通過簡單地寫#{ transform html }的功能,如果transform函數有一個簽名:transform :: Html -> Html,其中Htmlblaze-htmlhere定義的類型。我看到的問題是Blaze似乎沒有公開爲了走HTML樹而有用的功能,或者甚至僅僅獲得給定的Html的後代。那麼你會建議哪些策略?我應該嘗試進入Blaze內部嗎?

我不確定這是否應該被視爲Blaze純粹的問題。轉換Html元素不是Blaze的主要用例之一,因此需要在使用Yesod進行渲染的情況下解決此問題

回答

1

您必須首先渲染爲Text或ByteString,但blaze沒有提供分析內容的方法。然後你可以用像html-conduit或tagsoup這樣的庫來處理數據(這就是xss-sanitize所做的)。

+0

謝謝,這讓我覺得在頁面呈現時執行這種轉換是一個壞主意。我應該在將這些內容存儲到數據庫之前進行清理 – danza

相關問題