static strbuf* sanitize_word (varnam *handle, const char *word) { size_t i; bool is_special = false; strbuf *string, *to_remove; string = get_pooled_string (handle); to_remove = get_pooled_string (handle); strbuf_add (string, word); for (i = 0; i < string->length; i++) { is_special = is_special_character (string->buffer[i]); if (is_special) strbuf_addc (to_remove, string->buffer[i]); else break; } strbuf_remove_from_first (string, strbuf_to_s (to_remove)); strbuf_clear (to_remove); for (i = string->length - 1; i >= 0; i--) { is_special = is_special_character (string->buffer[i]); if (is_special) strbuf_addc (to_remove, string->buffer[i]); else break; } strbuf_remove_from_last (string, strbuf_to_s (to_remove)); language_specific_sanitization (string); /* Remove trailing ZWNJ and leading ZWJ */ strbuf_remove_from_first (string, ZWNJ()); strbuf_remove_from_last (string, ZWNJ()); strbuf_remove_from_first (string, ZWJ()); return string; }
void url_encode(lfl_string* str) { lfl_string out; for (int i = 0; i < str->length(); i++) { char c = (*str)[i]; if( !is_ascii( c ) || is_special_character(c) ) { out += string_printf( "%%%2x", c ); } else { // Pass this character straight through. out += c; } } *str = out; }