urlencode_smart

Smart url encodes characters without already urlencoded strings. You can also set allowed_chars in argument where default are "-_.~".

Created by: Raptiler
Installed 1 times

Category: Convert

Created on: Wednesday, October 30, 2024 at 11:34:41 AM

Updated on: Saturday, December 21, 2024 at 3:10:52 PM

Tag arguments
[
   {
      "type": "string",
      "name": "allowed_chars",
      "help": "Characters that are allowed without encoding",
      "defaultValue": "-_.~"
   }
]
Code
class urlencode_smart {
  encode(input, { allowed_chars = "-_.~" }) {
    let result = "";
    let i = 0;

    while (i < input.length) {
      let char = input[i];

      if (char === "%" && i + 2 < input.length) {
        let next_two = input.slice(i + 1, i + 3);
        if (/[0-9A-Fa-f]{2}/.test(next_two)) {
          result += "%" + next_two;
          i += 3;
          continue;
        }
        result += "%25";
      } else {
        let char_code = char.charCodeAt(0);
        if (
          (char_code >= 48 && char_code <= 57) || // 0-9
          (char_code >= 65 && char_code <= 90) || // A-Z
          (char_code >= 97 && char_code <= 122) || // a-z
          allowed_chars.includes(char)
        ) {
          result += char;
        } else {
          let hex_value = char_code.toString(16).toUpperCase();
          result +=
            "%" + (hex_value.length === 1 ? "0" + hex_value : hex_value);
        }
      }

      i += 1;
    }

    return result;
  }
}