Percent-encode text for safe use in URLs and query strings, or decode an encoded URL back to readable text.
Text • percent-encoding
Encoding and decoding share the page, so any result can be pasted straight back to confirm it round-trips to the text you started with — the quickest check that nothing was mangled.
Results are recalculated on every keystroke, with no submit step and no page reload, so a value can be adjusted until the answer looks right rather than guessed once.
Everything runs in your browser — no account, no uploads, nothing leaves your device.
URL encoding (also called percent-encoding) replaces characters that are unsafe or reserved in a web address with a % followed by their hexadecimal byte value — a space becomes %20, an ampersand becomes %26. It keeps query strings, form data and links valid when they contain spaces, symbols, or non-English characters.
Anyone building links, REST APIs, UTM tracking URLs or web forms needs it constantly. This tool encodes text for safe use inside a URL and decodes percent-encoded URLs back to readable text — instantly and privately in your browser, with nothing uploaded.
URLs may only contain a restricted set of ASCII characters, so anything outside it — spaces, ampersands, non-English letters — must be percent-encoded: replaced by a % followed by the character's hexadecimal byte value. The rule that trips people is context. A character that is safe in one part of a URL is dangerous in another: an ampersand is a legitimate separator between query parameters but must be encoded when it appears inside a parameter's value, or it silently splits the parameter in two. Multi-byte UTF-8 characters encode as several percent sequences, one per byte.
Unsafe character → % + two hex digits of its byte valueSpace → %20 (or + in application/x-www-form-urlencoded)Reserved: : / ? # [ ] @ ! $ & ' ( ) * + , ; =Unreserved and never encoded: A–Z a–z 0–9 - _ . ~where:
Assumptions: Encode each component separately, before assembling the URL — never encode a complete URL in one pass, which would destroy the structural separators.
Encode a parameter value whose characters would otherwise break the query string.
Resulta b&c=d encodes to a%20b%26c%3Dd
Leaving the ampersand raw would produce ?q=a b&c=d, which a server reads as two parameters — q with the value "a b" and a separate c with value "d". The data loss is silent, which is why this is such a persistent source of bugs.