Query-string builder
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.
How to use
- Type your parameters, one
key=valueper line. Lines starting with#are treated as comments, and a line with no=becomes a parameter with an empty value. - To repeat a key, just write it twice — then pick the Repeated keys notation your backend expects.
- Choose an Encoding. Use form encoding if the value goes into a form submission or an analytics parameter; otherwise
encodeURIComponentis the safe default. - Paste a Base URL to get the whole thing assembled. Any existing query string on the base is replaced.
- 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.