Skip to content

URL encode and decode, with Arabic links shown both ways

Paste a link, a search term or a whole list and get the percent-encoded form a browser sends, or turn a long %D8%AF%D8%A8%D9%8A string back into words you can read. Choose between encoding a single value and a full address, see every line readable and encoded side by side, break a query string into a table, and find the exact spot where a broken link goes wrong.

Quick answer

To URL encode text, choose Encode and paste it below: the result appears as you type. Pick One value to encode a search term or a query value (like encodeURIComponent), or Full URL to keep : / ? & = working (like encodeURI). To decode, choose Decode. Each line is handled on its own, and lines with broken % codes are listed with the position of the problem.

Runs in your browser, nothing is uploaded

Based on RFC 3986: Uniform Resource Identifier, section 2 (characters and percent-encoding) · Page updated 22 October 2026

Encodes every character that has a meaning in a URL, including / ? # & = and +. Use it for one query value, one path segment or a link you are putting inside another link.

0 lines · no problems · 0 → 0 characters

Writing a new page address? Make a short, clean one first with the slug generator for English and Arabic titles

How to use the URL Encoder / Decoder

  1. Choose Encode or Decode.
  2. Choose One value for a search term, a query value or a link inside another link, or Full URL for a complete address.
  3. Paste your text. With bulk mode on, every line is converted separately; turn it off to treat the whole box as one value, line breaks included.
  4. Check the side-by-side table and the list of problems, if any. For a URL, the breakdown shows the domain, the readable path and every query parameter.
  5. Copy the result, download it as a .txt file or download a CSV with both forms of every line.

What URL encoding is

A URL may only carry a small set of ASCII characters. RFC 3986, the standard for web addresses, lets letters, digits and - . _ ~ through as they are and gives characters like / ? # & = a structural meaning. Everything else, including a space and every Arabic letter, is written as its UTF-8 bytes, each byte as % followed by two hexadecimal digits. A space becomes %20. The Arabic letter د is two bytes in UTF-8, so it becomes %D8%AF, six characters for one letter. Decoding reverses that. Browsers do it for you in the address bar, which is why an Arabic link looks normal there but turns into a long %D8 string when you paste it into an email, a spreadsheet or a chat app.

encodeURIComponent or encodeURI: which one to use

The two modes match the two JavaScript functions developers use. One value works like encodeURIComponent: it also encodes / ? # & = + , ; : @ and $, because inside a value those characters would break the address. Use it for a search term, a single query value, a path segment, or a whole link you are passing as the value of another link, such as a redirect or share URL. Full URL works like encodeURI: it leaves those structural characters alone so the address keeps working, and only encodes spaces, Arabic and other non-ASCII text and a few unsafe symbols. If you run a full address through One value, its slashes become %2F and it stops being a link; if you run a value containing & through Full URL, the & will split it into two parameters.

  • One value example: a b&c becomes a%20b%26c
  • Full URL example: https://example.com/a b?x=1&y=2 becomes https://example.com/a%20b?x=1&y=2
  • Form style: tick “Write spaces as +” to get a+b%26c, the format HTML forms send

Arabic URLs and Arabic domain names

An Arabic path or query is encoded byte by byte, and the side-by-side table shows both forms with their lengths, so you can see that a 20-letter Arabic slug becomes about 120 characters on the wire. Domain names work differently: they are not percent-encoded at all. An Arabic domain is converted to punycode, an ASCII form that starts with xn--, which is what DNS actually looks up. Full URL mode does that conversion for you using the browser's own URL engine, and Decode shows an xn-- domain in Arabic again, so you can check which address a punycode link really points to.

Broken links, double encoding and bulk lists

The browser's own decoder stops with an error at the first bad sequence, such as a % sign followed by letters that are not hexadecimal, or bytes cut in the middle of an Arabic letter. This tool keeps going: it decodes the rest of the line, keeps the broken part exactly as typed, and lists each problem with its line and character position. It also spots double encoding, where %25 (an encoded % sign) shows a link was encoded twice, and can decode it until it is clean. In bulk mode each line is handled on its own, and the CSV export puts the readable form, the encoded form, its length and any problems in separate columns.

Frequently asked questions

How do I URL encode text online?

Choose Encode, pick One value for a search term or query value or Full URL for a complete address, and paste your text. The encoded result appears as you type; copy it or download it.

What is the difference between encodeURI and encodeURIComponent?

encodeURIComponent encodes every character with a meaning in a URL, including / ? & and =, so it suits a single value. encodeURI leaves those characters alone so a full address keeps working, and only encodes spaces, non-ASCII text and a few unsafe symbols.

Why does decoding fail with “URI malformed”?

The text contains a % that is not followed by two hex digits, or bytes that are not valid UTF-8, often a letter cut in half or text saved in an old code page. This tool decodes the rest and shows where each broken part is.

Is a space %20 or + in a URL?

Both exist. %20 is the standard encoding everywhere in a URL. HTML forms send spaces in the query string as +, and servers read + as a space there. Use the + option only for form-style query strings.

What is xn-- in a web address?

It is punycode, the ASCII form of a domain name written in Arabic or another non-Latin script. DNS only stores ASCII names, so browsers convert the domain to xn-- form. Decode with Full URL to see the original script.