URL Encoder & Decoder

Encode or decode URLs in UTF-8 or old charsets, undo double encoding like %2520, and repair garbled text such as سلام or Café. Persian and Arabic slugs explained.

Try:

    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 typedEncode → Only non-English characters and spaces
    Match a WordPress slug as it’s stored in the databaseEncode → Text or query value + Lower-case hex
    Build a POST body or sign an OAuth / AWS requestEncode → Form data or RFC 3986 strict
    Read a link full of %D8%B3…Decode
    Read a link with %2520 or %25D8 in itDecode with Decode every layer on
    Make a URL readable but still clickableDecode 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. %20 works there too.
    • When decoding, turn on + means space only for query strings and form data, otherwise a real + (like in C++) 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:

    1. Searching the database: to find a post by its slug in phpMyAdmin, search post_name for the encoded, lower-case form. Use Text or query value with Lower-case hex to get it.
    2. 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.
    3. Watch out for half-encoded links: copying, pasting and editing a Persian URL by hand often gives a mix of %D8%B3 and 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 %XX alone, 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

    CharacterEncodedEncoded by encodeURIComponent?Encoded by encodeURI?
    space%20 (or + in forms)YesYes
    !%21NoNo
    "%22YesYes
    #%23YesNo
    $%24YesNo
    %%25YesYes
    &%26YesNo
    '%27NoNo
    ( )%28 %29NoNo
    *%2ANoNo
    +%2BYesNo
    ,%2CYesNo
    /%2FYesNo
    :%3AYesNo
    ;%3BYesNo
    < >%3C %3EYesYes
    =%3DYesNo
    ?%3FYesNo
    @%40YesNo
    [ ]%5B %5DYesYes
    \%5CYesYes
    |%7CYesYes
    ~%7ENoNo
    new line%0A (Windows: %0D%0A)YesYes
    tab%09YesYes

    The same thing in code

    Option hereJavaScriptPHPPython 3
    Text or query valueencodeURIComponent()closest: rawurlencode(), which also encodes ! * ' ( )quote(s, safe="!~*'()")
    Full URL, keep URL charactersencodeURI()no built-inno built-in
    Form dataURLSearchParamsurlencode(), which also encodes * and ~quote_plus(), which also encodes * and keeps ~
    RFC 3986 strictno built-inrawurlencode()quote(s, safe="")
    DecodedecodeURIComponent()rawurldecode(), or urldecode() for + as spaceunquote(), 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.