Function html_escape::encode_unquoted_attribute_to_vec
source · Expand description
Write text used in an unquoted attribute to a mutable Vec<u8>
reference and return the encoded data slice. Except for alphanumeric characters, escape all characters which are less than 128.
The following characters are escaped to named entities:
&
=>&
<
=><
>
=>>
"
=>"
Other non-alphanumeric characters are escaped to &#xHH;
.
Examples found in repository?
src/encode/html_entity/unquoted_attribute.rs (lines 51-54)
22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72
pub fn encode_unquoted_attribute<S: ?Sized + AsRef<str>>(text: &S) -> Cow<str> {
let text = text.as_ref();
let text_bytes = text.as_bytes();
let text_length = text_bytes.len();
let mut p = 0;
let mut e;
loop {
if p == text_length {
return Cow::from(text);
}
e = text_bytes[p];
if utf8_width::is_width_1(e) && !e.is_ascii_alphanumeric() {
break;
}
p += 1;
}
let mut v = Vec::with_capacity(text_length);
v.extend_from_slice(&text_bytes[..p]);
write_html_entity_to_vec(e, &mut v);
encode_unquoted_attribute_to_vec(
unsafe { from_utf8_unchecked(&text_bytes[(p + 1)..]) },
&mut v,
);
Cow::from(unsafe { String::from_utf8_unchecked(v) })
}
/// Write text used in an unquoted attribute to a mutable `String` reference and return the encoded string slice. Except for alphanumeric characters, escape all characters which are less than 128.
///
/// The following characters are escaped to named entities:
///
/// * `&` => `&`
/// * `<` => `<`
/// * `>` => `>`
/// * `"` => `"`
///
/// Other non-alphanumeric characters are escaped to `&#xHH;`.
#[inline]
pub fn encode_unquoted_attribute_to_string<S: AsRef<str>>(text: S, output: &mut String) -> &str {
unsafe { from_utf8_unchecked(encode_unquoted_attribute_to_vec(text, output.as_mut_vec())) }
}