Percent-encode text for use in a URL, or decode it back to readable form. Choose whether you're encoding a single value or a whole URL — the two need different treatment, and using the wrong one is what turns a working link into a broken one.

Result

—

Type below to see the conversion.

Encode or Decode

Paste a URL, a query-string value, or any text.

Form submissions send a space as +; everywhere else + is a literal plus.

Try:

All encoding and decoding happens locally in your browser. No URL or text is uploaded to Flipper File.

Free URL Encoder & Decoder

URL encoding — also called percent-encoding — replaces characters that have a special meaning in a URL, or that can't travel safely through one, with a % followed by two hexadecimal digits. A space becomes %20, an ampersand becomes %26.

Encoding a value is not the same as encoding a URL

This is the distinction that catches people out. In https://example.com/search?q=hello world, the characters : / ? = are doing structural work — they separate the scheme, host, path and query. Encoding them produces https%3A%2F%2Fexample.com%2Fsearch%3Fq%3Dhello%20world, which is no longer a URL at all; it's one long opaque string that no browser or server will route.

Only the value needs encoding: q=hello%20world. Pick a single value when you're encoding one parameter, and a whole URL when you want the structure left intact.

Form values use + for a space

Data submitted as application/x-www-form-urlencoded encodes a space as + rather than %20. Both decode back to a space in that context, but outside a form a + is a literal plus sign — which is why decoding first+last can give you either first last or first+last depending on where the data came from.

Double encoding

If text is encoded twice, % itself gets encoded to %25, so %20 becomes %2520. This shows up when a value is encoded by application code and then again by a framework. Decoding once gives you %20 rather than a space, which is the tell.

Which characters are left alone

The unreserved set — A–Z a–z 0–9 - _ . ~ — never needs encoding. JavaScript's encoder also leaves ! * ' ( ) alone, though some stricter server-side encoders do escape those.

Common URL Encoding Examples

  • Spaces in a path
    Input: /files/My Project Plan.pdf
    Encoded: /files/My%20Project%20Plan.pdf
  • Query string with reserved characters
    Input: q=rock & roll? yes/no
    Encoded: q%3Drock%20%26%20roll%3F%20yes%2Fno
  • Full URL with query + hash
    Input: https://example.com/search?q=flipper file&tags=a&tags=b#section 1
    Encoded: https://example.com/search?q%3Dflipper%20file%26tags%3Da%26tags%3Db%23section%201
    Tip: Only encode the value parts if you’re building URLs programmatically.
  • “+” treated as a space (form encoding)
    Input: first+last=John+Doe
    Decode (with “+ as space” checked): first last=John Doe
    Decode (unchecked): first+last=John+Doe
  • Unicode / Emoji
    Input: status=All good ✅
    Encoded: status%3DAll%20good%20%E2%9C%85
  • Already-encoded percent signs
    Input: name=100% guaranteed
    Encoded safely: name%3D100%25%20guaranteed
    Single % becomes %25 to avoid malformed sequences.
  • Path separators and dots
    Input: /api/v1/users/../admin?impersonate=true
    Encoded: %2Fapi%2Fv1%2Fusers%2F..%2Fadmin%3Fimpersonate%3Dtrue
    When encoding a whole string, slashes are encoded too. Usually you encode only parameter values.

Use Encode to percent-escape reserved characters for query strings and form values. Use Decode to bring percent-encoded data back to readable text. If you’re decoding form data (application/x-www-form-urlencoded), check the “+ as space” option.

Our Full Dev Tool Library

Flipper File