urltoolskit.org
URL utilities, in the browser
Say hi →

Query-string builder

key=value lines or JSON → encoded query · four array notations · three encoding modes

Write parameters the easy way — one key=value per line, or paste a JSON object — and get a correctly encoded query string out. The part that matters is the choices: which array notation your backend expects, and whether spaces become %20 or +. Getting either wrong is a bug you will spend an hour on.

Ready.

How to use

  1. Type your parameters, one key=value per line. Lines starting with # are treated as comments, and a line with no = becomes a parameter with an empty value.
  2. To repeat a key, just write it twice — then pick the Repeated keys notation your backend expects.
  3. Choose an Encoding. Use form encoding if the value goes into a form submission or an analytics parameter; otherwise encodeURIComponent is the safe default.
  4. Paste a Base URL to get the whole thing assembled. Any existing query string on the base is replaced.
  5. Switch Input format to JSON to paste an object instead; arrays in the JSON become repeated keys.

Choosing the array notation

There is no standard for arrays in query strings, and every framework picked differently. Repeat (tag=red&tag=blue) is the most widely understood: Express, Go, Rails and ASP.NET Core all read it as a list, though PHP keeps only the last value. Brackets (tag[]=…) is what PHP needs to produce an array, and Rails accepts it too. Indexed (tag[0]=…) is required by some older .NET model binders and by Qs-style parsers when order must be explicit. Comma-joined is common in REST APIs that document a comma-separated list, and is the only form that stays short with many values — but it breaks the moment a value legitimately contains a comma.

On encoding: encodeURIComponent leaves ! ' ( ) * unescaped even though RFC 3986 reserves them. Most servers do not care. AWS Signature V4, OAuth 1.0 and several payment APIs do, and a signature computed over the unescaped form will not verify — that is what the strict option is for.

FAQ

Should a space be %20 or +?

%20 is valid everywhere. + means a space only in application/x-www-form-urlencoded data, which includes query strings written by form libraries — and in a path it is a literal plus. If you do not know which the receiver expects, use %20.

How do I keep an empty parameter?

Write debug= and leave Skip parameters with an empty value off. Present-but-empty is different from absent, and many frameworks treat the former as a true flag.

Why would I sort the keys?

Two reasons: cache keys, where ?a=1&b=2 and ?b=2&a=1 otherwise count as different URLs; and signed URLs, where the signature is usually computed over a canonical sorted form. The signed URL builder does the sorting for you when signing.

Can it go the other way?

Yes — the query-string editor takes an existing URL apart into an editable table, and the batch URL parser does it for a whole list.