URL encoding (percent-encoding) replaces characters that aren't safe inside a URL — spaces, &, #, non-ASCII letters — with a % followed by their byte value in hex, the same rules encodeURIComponent and decodeURIComponent apply. This tool also splits a full URL into its protocol, host, path, query parameters, and hash fragment in an editable table, so you can tweak one parameter and see the rebuilt URL instantly.
encodeURI leaves characters like /, :, and ? untouched because they're structurally meaningful in a full URL; encodeURIComponent escapes those too, since it assumes you're encoding a single value — like one query parameter — that shouldn't contain them.
Inside a query string built from a form (application/x-www-form-urlencoded), + represents a space; everywhere else in a URL it's just a literal character, and spaces need to be encoded as %20.
Yes, just run it through the decoder twice — double-encoding happens when a value gets encoded once by your app and again by a framework or proxy, so decoding once will still leave visible %25 sequences behind.