use ammonia::Builder; use once_cell::sync::Lazy; static BUILDER: Lazy = Lazy::new(|| { let mut builder = Builder::empty(); builder.tags( [ "a", "span", "p", "br", "b", "strong", "i", "em", "s", "del", "u", "code", "pre", "ul", "ol", "li", "blockquote", "img", ] .into_iter() .collect(), ); builder.tag_attributes( [ ("a", ["href", "data-user"].into_iter().collect()), ("img", ["src"].into_iter().collect()), ] .into_iter() .collect(), ); builder.set_tag_attribute_values( // note: rel="noopener noreferrer" is added automatically [("a", [("target", "_blank")].into_iter().collect())] .into_iter() .collect(), ); builder }); pub fn sanitize_html(html: &str) -> String { BUILDER.clean(html).to_string() } #[cfg(test)] mod tests { use super::sanitize_html; #[test] fn test_a_attrs() { let source = r#"

hello world

"#; let output = sanitize_html(source); assert_eq!( output, r#"

hello world

"# ); } }