Skip to main content
NeatUtility

URL Encoder & Decoder

Encoders & Decoders100% Client-Side
Ready
URL
0 lines0 chars
0 B / 4.77 MB
About this tool, examples & FAQ

Percent-encode text for safe use in URIs or decode percent-escapes back to text, entirely in your browser. Encoding builds on component encoding with optional strict reserved-mark handling and form-style space handling.

Key facts

Verified capabilities and limits of this utility
Accepted inputURL or text for encoding; percent-encoded text for decoding
Encoding modesEncode or decode with Strict RFC 3986 marks (encode only) and Spaces-as-plus handling for form-style query strings
Max input size5 MB
Execution deadline2 s
Processing locationBrowser-only: pasted input is not uploaded or visited

How to use

  1. Paste or type the text or URL into the input editor.
  2. Select the operation: 'Encode' to percent-encode or 'Decode' to revert percent-escaped characters.
  3. Enable 'Strict RFC 3986' to also encode !, ', (, ), and * on encode.
  4. Enable 'Spaces as +' when preparing form-style query strings.
  5. Click 'Run' to execute.
  6. Click 'Swap' to toggle between the encoded and decoded views.

Example

Encode a component with reserved characters

Input

hello world&x=1

Example output

hello%20world%26x%3D1

Edge cases

Full URLs encoded as one component

Encoding treats the whole input as a single component, so separators such as ://, ?, and & are escaped too. Encode only the value part when you need the address structure to survive.

Malformed escapes on decode

Truncated or invalid percent sequences such as a trailing % are rejected with an invalid-input error instead of producing partial output.

Lone surrogates

Lone surrogate characters cannot be encoded and are rejected with an invalid-input error.

Strict mode is encode-only

Strict RFC 3986 changes encoding only; it has no effect on decoding, which always resolves percent-escapes the same way.

Empty input

Empty or whitespace-only input is rejected with an invalid-input error.

How it works

  1. Encodes with component encoding, then escapes the reserved marks !, ', (, ), and * when Strict RFC 3986 is on.
  2. Encodes spaces as '+' instead of '%20' when Spaces-as-plus is on.
  3. Decodes '+' to a space first when Spaces-as-plus is on, then resolves percent-escapes.
  4. Rejects malformed escape sequences and lone surrogates with invalid-input errors.
  5. Executes inside a Web Worker bounded by the tool deadline.

Frequently asked questions

Which options should I use for encoding?

Use the defaults for standard component encoding. Enable Strict RFC 3986 when the receiver requires the reserved marks !, ', (, ), and * escaped; enable Spaces-as-plus only for form-style query strings.

When does '+' mean a space?

Only with Spaces-as-plus enabled: encoding writes '+' for spaces and decoding reads '+' as a space, matching form-style space handling only; other form-encoding rules are not implemented. Otherwise spaces encode as '%20' and a literal '+' decodes to '+'.

Why does decoding fail?

Decoding fails on malformed percent sequences such as a trailing '%' or non-hexadecimal digits. Fix or re-encode the value so every '%' is followed by two hexadecimal digits.

Which characters does strict mode add?

Strict mode additionally encodes !, ', (, ), and *, which the standard component encoder leaves unescaped. Use it where a specification requires strict RFC 3986 encoding, such as API signature base strings. Decoding is unaffected by this toggle.

Should I encode a whole URL at once?

Only if you intend to nest it inside another URL. Encoding a full URL escapes its ://, ?, and & separators, so encode just the component or value and leave the address structure intact.

Is the URL I paste visited or fetched?

No. The tool only transforms the text you paste inside a Web Worker; it never requests or opens the address.

References