Which Special Characters Need URL Encoding, and What Are Their Encoded Forms?

Updated

Use this table to check the percent-encoded form of common special characters before you decode or troubleshoot a URL. Each character is replaced by a percent sign followed by its hexadecimal code — for example, ! becomes %21, # becomes %23, and ? becomes %3F. These characters need encoding because they play structural roles in a URL, so leaving them raw can break how a link is parsed.

Character-to-Encoding Reference

The following pairs come from the reference table published on url-decode.com. The left column is the literal character; the right column is its encoded form.

Character URL Encoded
! %21
# %23
$ %24
& %26
' %27
( %28
) %29
* %2A
+ %2B
, %2C
/ %2F
: %3A
; %3B
= %3D
? %3F
@ %40
[ %5B
] %5D

The same source also gives three everyday examples: a space becomes %20, a forward slash / becomes %2F, and a colon : becomes %3A.

Why These Characters Need Encoding

URL encoding and decoding exist so that addresses and data pass correctly between browsers, servers, and APIs. The characters in the table are not arbitrary — they carry structural meaning inside a URL. ? starts a query string, & separates parameters, # marks a fragment, / separates path segments, and : separates a scheme from the rest of the address. If these appear unencoded where they are meant to be data, the URL can be misread, break, or fail to pass data between systems.

Encoding replaces each such character with a standardized percent-encoded sequence, so the URL keeps its structure while the data travels intact. Decoding reverses the process for people who need to read, edit, share, or troubleshoot the link.

Worked Example

An encoded URL such as:

http%3A%2F%2Furl-decode.com%2Ftool%2Furl-decode

decodes to:

http://url-decode.com/tool/url-decode

Reading it against the table: %3A → :, %2F → /. The result is a normal, human-readable address.

Checking a Decoded Result

After decoding, compare the output against the table above rather than assuming it is correct:

  • Structural characters restored in the right places. A decoded : should sit after the scheme (http:), and / should separate path segments. If a %2F was meant to be literal data inside a parameter, decoding it to / may change how the URL is interpreted.
  • Spaces look right. %20 should come back as a space. If the output shows a literal + where you expected a space, note that + has its own encoding (%2B) and is not the same as %20.
  • No leftover percent sequences. If % codes remain, the input may have been double-encoded or only partially decoded.
  • Brackets and reserved symbols match the source. [ and ] should return as %5B and %5D when encoded; seeing them raw in an encoded string is a sign to re-check the input.

For multi-line input, url-decode.com offers a "Decode each line separately" option, which is useful when you have several entries and want each one decoded on its own line. You can paste encoded text, load it from a URL, or upload a text file, then copy or download the result.

Quick Decision Guide

  • Decoding a single link to read it: paste it into the decoder and check the output against the table.
  • Decoding a batch of links or parameters: enable per-line decoding so entries stay separated.
  • Encoding a value for use in a query string: replace each character in the table with its encoded form, and remember that a space is %20.
  • Unsure whether a character is safe raw: if it appears in the table, encode it when it is meant as data rather than URL structure.