aster_forge_utils/
html.rs1pub fn escape_html(value: impl AsRef<str>) -> String {
8 value
9 .as_ref()
10 .replace('&', "&")
11 .replace('"', """)
12 .replace('\'', "'")
13 .replace('<', "<")
14 .replace('>', ">")
15}
16
17pub fn escape_script_json(value: impl AsRef<str>) -> String {
23 value
24 .as_ref()
25 .replace('&', "\\u0026")
26 .replace('<', "\\u003C")
27 .replace('>', "\\u003E")
28 .replace('\u{2028}', "\\u2028")
29 .replace('\u{2029}', "\\u2029")
30}
31
32#[cfg(test)]
33mod tests {
34 use super::{escape_html, escape_script_json};
35
36 #[test]
37 fn escape_html_replaces_markup_and_quote_characters() {
38 assert_eq!(
39 escape_html(r#"<meta title="A&B's">"#),
40 "<meta title="A&B's">"
41 );
42 }
43
44 #[test]
45 fn escape_script_json_replaces_html_parser_breakout_characters() {
46 assert_eq!(
47 escape_script_json("</script>&\u{2028}\u{2029}"),
48 "\\u003C/script\\u003E\\u0026\\u2028\\u2029"
49 );
50 }
51}