Parse, edit and rebuild any query string
This developer tool does a full round trip on a URL query string. Paste a link and it
splits the query into a clean table of keys and decoded values — with percent-encoding
and + spaces already decoded so you read the real content. Then you can edit every
row, add new parameters, delete ones you do not want, and the tool rebuilds a correctly
encoded query string live, ready to copy back into a link, a redirect, or an API request.
It is built for debugging links, auditing analytics and UTM tracking tags, tidying up
messy share URLs, and constructing request strings by hand.
How it works
The parser accepts three input shapes: a full URL, a string starting with ?, or a bare
key=value query string. It first strips any #fragment, keeps only the part after the
first ? when present, and feeds the rest to the browser’s built-in URLSearchParams
API. That API splits on &, separates each key from its value at the first =, and
URL-decodes both sides — turning %20 and + into spaces and %2F into /. Each pair
becomes one editable row, and repeated keys are kept as separate rows rather than merged.
When you edit the table, the rebuild step runs in reverse: every key and value is re-encoded
with encodeURIComponent, joined with = and &, and a leading ? is shown. A toggle
chooses whether spaces become + or %20. A second output renders the parameters as JSON,
collapsing any repeated keys into an array — handy when you need the data in a structured form.
Everything runs locally in your browser, so even private or signed URLs stay on your machine.
Example
Paste this URL:
https://example.com/search?q=hello+world&page=2&sort=desc&tags=a&tags=b
You get five editable rows:
| Key | Decoded value |
|---|---|
| q | hello world |
| page | 2 |
| sort | desc |
| tags | a |
| tags | b |
Notice that hello+world decodes to hello world, and the two tags parameters each get
their own row. Change page to 3, delete the second tags row, and the rebuilt query
becomes ?q=hello+world&page=3&sort=desc&tags=a. The JSON view shows tags as an array when
both rows are present. Everything is calculated in your browser — nothing is uploaded.