Paste text that shows up as سلام, ط³ظ„ط§ظ… or Café. This happens when UTF-8 text is read with an old charset, often after a database move. The tool finds the charset and reverses it, up to three times.
What each character becomes
Runs entirely in your browser. Nothing you type is sent to DanialTV.
Which option should I pick?
| You want to… | Tab and option |
|---|---|
Put a word or a value into a query string (?q=…) | Encode → Text or query value |
| Turn a Persian or Arabic link into a link that works everywhere (sitemap, email, hreflang, redirect) | Encode → Full URL, as browsers send it |
| Encode the Persian part of a URL but leave the rest exactly as typed | Encode → Only non-English characters and spaces |
| Match a WordPress slug as it’s stored in the database | Encode → Text or query value + Lower-case hex |
| Build a POST body or sign an OAuth / AWS request | Encode → Form data or RFC 3986 strict |
Read a link full of %D8%B3… | Decode |
Read a link with %2520 or %25D8 in it | Decode with Decode every layer on |
| Make a URL readable but still clickable | Decode with Keep the URL working on |
Repair text like سلام, ط³ظ„ط§ظ… or Café | Fix garbled text |
You don’t have to pick a tab first: paste anything, and if it looks encoded or garbled the tool offers the right tab.
How URL encoding works, in 30 seconds
A URL may only contain a small set of ASCII characters. Everything else is first turned into bytes (almost always UTF-8) and each byte is written as % plus two hex digits. The Persian letter س is two bytes in UTF-8, D8 B3, so it becomes %D8%B3. An emoji like 👍 is four bytes and becomes %F0%9F%91%8D. Open What each character becomes under the result to see this for your own text.
Characters that have a job in a URL, such as / ? # & =, are encoded only when they are part of a value. That is why there are several options: encoding a whole URL must keep / and ?, but encoding a search term must not.
Space: %20 or +?
- In the path (
/my page/), a space must be%20. A+there is a real plus sign. - In the query string (
?q=my+page), HTML forms send spaces as+, and PHP, WordPress and most servers read+as a space.%20works there too. - When decoding, turn on + means space only for query strings and form data, otherwise a real
+(like inC++) would become a space.
Persian and Arabic URLs in WordPress
When you publish a post titled «سلام دنیا», WordPress saves the slug already encoded, in lower case: %d8%b3%d9%84%d8%a7%d9%85-%d8%af%d9%86%db%8c%d8%a7. Browsers show the readable version in the address bar, but when you copy the link from Chrome you get the encoded one. Three things I learned running Persian WordPress sites:
- Searching the database: to find a post by its slug in phpMyAdmin, search
post_namefor the encoded, lower-case form. Use Text or query value with Lower-case hex to get it. - Sitemaps, canonical and hreflang tags: use the encoded form. It’s what Yoast and Rank Math output, and it works in every tool that reads them.
- Watch out for half-encoded links: copying, pasting and editing a Persian URL by hand often gives a mix of
%D8%B3and raw letters, or a double-encoded%25D8%25B3. Search Console then reports a 404 for a URL you never published. Decode it with Decode every layer to see what it was meant to be, then use the Full URL option, which leaves existing%XXalone, to produce the clean version.
Double encoding: what %2520 means
%25 is the code for the % sign itself. If a URL that is already encoded gets encoded again, %20 becomes %2520 and %D8 becomes %25D8. It usually happens in redirect plugins, link shorteners, UTM builders and email tools that encode the whole link without checking. The decoder detects this, decodes every layer and tells you how many there were. When you encode, keep Don’t encode existing %XX again on to avoid causing it.
Garbled text: سلام and ط³ظ„ط§ظ…
This isn’t URL encoding, but it comes from the same place: bytes read with the wrong character set. UTF-8 text displayed as Windows-1252 looks like سلام or Café; displayed as Windows-1256, the Arabic-script code page, it looks like ط³ظ„ط§ظ…. Both are common after a WordPress database is exported or imported with the wrong connection charset.
The Fix garbled text tab turns the characters back into bytes with each likely charset, checks which result is valid UTF-8, and keeps the one that removes the most garbage. It handles text damaged two or three times over and text that mixes several kinds of damage. It fixes text you paste; for a whole database, fix the export and import settings instead of repairing posts one by one. If the text shows ? or empty boxes, the original characters were lost when it was saved and no tool can bring them back.
URL encoding table
| Character | Encoded | Encoded by encodeURIComponent? | Encoded by encodeURI? |
|---|---|---|---|
| space | %20 (or + in forms) | Yes | Yes |
! | %21 | No | No |
" | %22 | Yes | Yes |
# | %23 | Yes | No |
$ | %24 | Yes | No |
% | %25 | Yes | Yes |
& | %26 | Yes | No |
' | %27 | No | No |
( ) | %28 %29 | No | No |
* | %2A | No | No |
+ | %2B | Yes | No |
, | %2C | Yes | No |
/ | %2F | Yes | No |
: | %3A | Yes | No |
; | %3B | Yes | No |
< > | %3C %3E | Yes | Yes |
= | %3D | Yes | No |
? | %3F | Yes | No |
@ | %40 | Yes | No |
[ ] | %5B %5D | Yes | Yes |
\ | %5C | Yes | Yes |
| | %7C | Yes | Yes |
~ | %7E | No | No |
| new line | %0A (Windows: %0D%0A) | Yes | Yes |
| tab | %09 | Yes | Yes |
The same thing in code
| Option here | JavaScript | PHP | Python 3 |
|---|---|---|---|
| Text or query value | encodeURIComponent() | closest: rawurlencode(), which also encodes ! * ' ( ) | quote(s, safe="!~*'()") |
| Full URL, keep URL characters | encodeURI() | no built-in | no built-in |
| Form data | URLSearchParams | urlencode(), which also encodes * and ~ | quote_plus(), which also encodes * and keeps ~ |
| RFC 3986 strict | no built-in | rawurlencode() | quote(s, safe="") |
| Decode | decodeURIComponent() | rawurldecode(), or urldecode() for + as space | unquote(), or unquote_plus() |
One difference worth knowing: JavaScript’s decodeURIComponent() stops with an error on a broken sequence like %E0%A4 or a lone %. This tool decodes everything it can, leaves the broken parts as they are, and tells you where they are.
Old character sets
Use UTF-8 unless you have a reason not to. Older sites sometimes sent query strings in the page’s own charset: an HTML form on a Windows-1256 page sends سلام as %D3%E1%C7%E3, not %D8%B3%D9%84%D8%A7%D9%85. If decoding with UTF-8 gives a warning about invalid bytes, the tool tests the common legacy charsets and suggests the one that fits. Encoding works with single-byte charsets such as Windows-1256, Windows-1252, ISO-8859-1 and Windows-1251; Japanese, Chinese and Korean charsets can be decoded.
Tested November 2026 against 60 test cases, including results compared with the browser’s own encodeURIComponent, encodeURI and URLSearchParams, broken and overlong UTF-8, emoji, international domains and three kinds of garbled text. Encoding 2.2 million characters took about 0.3 seconds.
FAQ
Is URL encoding a kind of encryption?
No. Anyone can decode it; it only makes text safe to put in a URL. Never rely on it to hide a password or a token.
Does Google treat the encoded and readable URL as the same page?
Yes. /سلام/ and /%D8%B3%D9%84%D8%A7%D9%85/ are the same address, and Google shows the readable form in results. The problems come from double-encoded or half-encoded versions, which are different URLs. Pick one form for internal links, canonical tags and the sitemap, and use it everywhere.
How do international domain names get encoded?
Not with %. Domain names use punycode: bücher.de becomes xn--bcher-kva.de. The Full URL, as browsers send it option does this for you, and the URL parts table shows both forms.
Is my text sent anywhere?
No. Everything runs in your browser. Only your option choices are remembered, in your own browser.
More free tools: the URL & domain extractor pulls every link out of a text, and the meta length checker shows whether Google will cut your title.