A URL, or a value to put in one
Encoded
the difference between these two is why links breakencodeURI()
Leaves & = / ? # + : $ , ; alone, because they are what gives
a URL its structure.
encodeURIComponent()
Escapes them, because inside a value an & would end your
parameter and start another.
Decoded
decodeURIComponent()
A + stays a plus sign.
form rules
A + becomes a space. Same bytes, different answer — decided
entirely by where they sit.
The parts
Read in this browser — nothing is uploaded and nothing is stored, which matters here because a URL often
carries a session token or a signed redirect. Punycode hosts are decoded with RFC 3492 written out,
because new URL() will not do it — and xn--80ak6aa92e.com decodes to a name
whose five letters are Cyrillic а, р, р, ӏ and е. Rendered on a screen it is indistinguishable from the
English word, which is the entire attack; the tool reports the mixed script rather than relying on you
to spot it.
The URL Encoder/Decoder needs JavaScript: the encoding, decoding and parsing all happen in this browser. With JavaScript switched off there is nothing to do the work.