Query String Builder

=

Assemble a correctly-encoded query string from a list of key-value pairs. The builder handles reserved characters, spaces and non-ASCII input the way RFC 3986 expects, so you can feed the result straight into a URL without breaking on ampersands or equals signs.

How to build a query string

  1. 1

    Add your pairs

    Type each parameter name and value. Add more rows for extra keys.

  2. 2

    Let encoding happen

    Spaces become %20, non-ASCII text becomes percent-encoded UTF-8, and reserved characters such as & = # ? are escaped.

  3. 3

    Copy the output

    Prepend it to your URL with ? or paste it into Postman, curl or a fetch() call.

What gets encoded

Per RFC 3986, anything outside the unreserved set (A-Z a-z 0-9 - _ . ~) must be percent-encoded inside a query component. In practice this means:

Character Encoded as Why
space %20 or + Ambiguous between contexts
& %26 Separates pairs, would break the string
= %3D Separates key from value
# %23 Starts the fragment
? %3F Starts the query itself
/ %2F Safe in paths, risky in values

Repeated keys and bracket notation

Rows are encoded independently and kept in their original order, so entering tag twice produces tag=a&tag=b. If your server expects brackets, type tag[] as the key; the brackets are encoded as %5B%5D. The tool does not guess which convention your framework uses.

Tips

  • Always encode user-supplied values; never concatenate them raw into the URL.
  • Keep query strings short: practical limits vary between browsers, proxies, CDNs and servers.
  • If a value looks binary, base64url-encode it before dropping it in.

Frequently Asked Questions

The builder always emits %20 for spaces under RFC 3986. The parser also accepts + and decodes it as a space for form-style queries.

Add one row per value. Repeat tags for tags=php&tags=laravel, or enter tags[] in each key field if your backend expects bracket notation.

That is HTML entity encoding applied by your template engine, not the query string itself. Make sure you are not double-escaping the output when rendering inside an href.

There is no single practical limit; browsers, proxies, CDNs and servers set different caps. Use a request body for large payloads.

Related Tools

Tool available in other languages