I have some HTML entered by the user which is displayed in a Yesod template. I would like to transform this HTML, stripping out style
attributes from it before it gets rendered, but i cannot find out how.
If my template contains #{ html }
i can pass html
as a value through a function simply writing #{ transform html }
, if the transform
function has a signature: transform :: Html -> Html
where Html
is the type defined by blaze-html
here. The problem i see is that Blaze does not seem to expose functionalities useful in order to walk an HTML tree, or even just get the descendents of a given Html
. So which strategies would you suggest? Should i try to get into the Blaze internals?
I am not sure whether this should be considered purely an issue with Blaze. Transforming Html
elements is not one of the main use cases of Blaze, so this problem needs to be tackled in the context of rendering with Yesod
You have to render to Text or ByteString first, blaze provides no means of analyzing content. Then you can process the data with a library like html-conduit or tagsoup (which is what xss-sanitize does).