1pub fn escape_xml(s: &str) -> String {
7 s.replace('&', "&")
8 .replace('<', "<")
9 .replace('>', ">")
10}
11
12pub fn escape_xml_attr(s: &str) -> String {
15 escape_xml(s)
16 .replace('"', """)
17 .replace('\'', "'")
18}
19
20#[cfg(test)]
21mod tests {
22 use super::*;
23
24 #[test]
25 fn test_escape_xml() {
26 assert_eq!(escape_xml("a & b"), "a & b");
27 assert_eq!(escape_xml("<tag>"), "<tag>");
28 assert_eq!(escape_xml("a < b & c > d"), "a < b & c > d");
29 }
30
31 #[test]
32 fn test_escape_xml_attr() {
33 assert_eq!(
34 escape_xml_attr("say \"hello\""),
35 "say "hello""
36 );
37 assert_eq!(
38 escape_xml_attr("it's"),
39 "it's"
40 );
41 assert_eq!(
42 escape_xml_attr("<a href=\"test\">link</a>"),
43 "<a href="test">link</a>"
44 );
45 }
46
47 #[test]
48 fn test_escape_empty() {
49 assert_eq!(escape_xml(""), "");
50 assert_eq!(escape_xml_attr(""), "");
51 }
52}