Encode URLs and query-string values, or decode percent-encoded links — instantly, 100% in your browser.
100% browser-local — your text never leaves this page. Encoding a full URL keeps : / ? & = intact; encoding a component escapes everything unsafe for query values.
What is URL encoding?
URLs can only contain certain characters. Percent-encoding replaces unsafe characters (spaces, non-ASCII text like Urdu/Arabic, symbols) with a % followed by hex codes — for example a space becomes %20. Use full URL mode for complete links and component mode when encoding a single query-string value.
Common encodings
Space → %20
& → %26 · = → %3D · ? → %3F
Non-Latin scripts (Urdu, Arabic, Chinese) are UTF-8 encoded automatically.
Frequently asked questions
What is the difference between encodeURI and encodeURIComponent?
encodeURI (full URL mode) leaves URL structure characters like : / ? & = intact. encodeURIComponent (component mode) escapes everything except letters, digits and - _ . ! ~ * ' ( ), which is what you need inside query-string values.
How do I decode a URL with %20 in it?
Paste it above, choose Decode URL mode, and click Convert. %20 becomes a space and all other percent-codes are restored.
Does URL encoding work with Urdu or Arabic text?
Yes. Non-ASCII characters are first converted to UTF-8 bytes, then each byte is percent-encoded. Decoding reverses the process exactly.
Is this URL encoder free?
Yes. It is 100% free with no signup required, and everything runs in your browser.
How URL encoding works
URLs may only contain a limited character set, so everything else — spaces, punctuation, non-Latin scripts — is converted by percent-encoding: each unsafe character becomes a % followed by the two hexadecimal digits of its UTF-8 bytes. A space becomes %20; a question mark becomes %3F. Decoding reverses the process, turning each %XX triplet back into its byte.
Worked examples
English with spaces:hello world? → hello%20world%3F (space = %20, ? = %3F). Arabic script:مكة (Makkah) → %D9%85%D9%83%D8%A9 — each Arabic letter is 2 bytes in UTF-8, hence 6 characters per letter. This is why encoded non-Latin text looks so long: it is not broken, just verbose. The encodeURI vs encodeURIComponent distinction:encodeURI leaves URL structure characters (:/?#) intact for encoding a whole URL, while encodeURIComponent encodes them too — use it for values you place inside a query string, so a & in your text does not split the parameter in two.
Practical tips and limits
Encode the value, not the whole URL: encoding https:// turns it into https%3A%2F%2F and breaks the link. In HTML form data, spaces may appear as + instead of %20 — both mean space, but only inside query strings. Characters that never need encoding (the “unreserved” set): A–Z, a–z, 0–9, hyphen, underscore, period, and tilde.
Debugging URLs: double-encoding and friends
The most common encoding bug is double-encoding: encoding an already-encoded string turns %20 into %2520 (the % itself gets encoded to %25), and the server then decodes only once — leaving a literal “%20” in your text. If you see %25 in a URL, something was encoded twice. Its mirror image is decoding too eagerly: decoding a value that legitimately contains %2F (an encoded slash) and then treating it as a path separator breaks routing. Rule of thumb: encode once, at the boundary — when the value enters the URL — and decode once, when it leaves. Paste any suspicious URL into the decoder above; if readable text appears after one decode but garbage after two, you have found your bug.
When not to encode
Do not encode values that are already encoded, and do not encode entire URLs — only the untrusted parts (query values, path segments typed by users). Modern frameworks and fetch encode query parameters automatically, so hand-encoding on top of that is the fastest route to a double-encoding bug. When pasting a URL into HTML, encode for the URL first, then HTML-escape the & characters for the attribute — two different encodings, in that order.
Frequently asked questions
What is the difference between %20 and + for spaces?
In URL paths, a space is %20. In form-encoded query strings (application/x-www-form-urlencoded), a space may be written as + instead. Both decode to a space, but + only means space inside a query string — in a path it is a literal plus sign.
Why does encoded Arabic or Urdu text look so long?
Each Arabic/Urdu letter takes 2 bytes in UTF-8, and percent-encoding expands every byte to 3 characters (%XX). So one letter becomes 6 characters — “مكة” becomes 18 characters. It looks alarming but decodes perfectly back to the original text.
Which characters never need encoding?
The unreserved set: letters (A–Z, a–z), digits (0–9), hyphen (-), underscore (_), period (.), and tilde (~). Everything else — spaces, punctuation, symbols, non-Latin scripts — should be percent-encoded when it appears in a URL.