— Developer Tools

Free Query String Editor

Paste a link to see every parameter decoded, get it as JSON, or write plain name=value lines and build an encoded query.

— Samples
Parameters 3Distinct names 3Valid
Live

What is a Query String Editor?

A query string is the part of a URL after the question mark, a list of name=value pairs joined by ampersands. This editor splits one into readable rows, converts it to JSON, or builds a correctly encoded query from plain lines you type.

It reads and writes queries with URL and URLSearchParams, the browser objects defined by the WHATWG URL Standard. That means a + is read as a space, percent escapes are decoded as UTF-8, and a broken escape such as %zz is kept as written, exactly as a browser or Node.js server sees it.

Key Features

Every Parameter on Its Own Row

Parse shows each name and decoded value as a row, in the order they appear. A forty-parameter tracking link becomes a table you can actually read.

Query String to JSON

To JSON turns the parameters into an object, and a name that repeats becomes an array. Paste the result straight into a test or a mock request.

Build From Plain Text

Type one name=value per line with spaces, accents and symbols left as they are. Build escapes each value separately, so an & inside a value can’t split it in two.

Any Starting Point

Paste a full URL, a path like /search?q=shoes, a query starting with ?, or a bare a=1&b=2. The fragment after # is dropped, just as browsers drop it from requests.

Links Aren’t Uploaded

Parsing runs on the URL objects built into your browser. Session tokens, OAuth codes and internal hostnames in a link stay on your machine.

Perfect for everyone

  • Web developers debugging requests
  • Marketers checking UTM links
  • QA engineers testing filter pages
  • Support teams reading redirect and callback URLs

How to Use the Query String Editor

Pick a mode, paste a link or type your parameters, and copy the result.

1

Choose Parse, To JSON or Build

Parse and To JSON read a URL or query you already have. Build goes the other way, from plain name=value lines to an encoded query string.

2

Paste a Link or Type Lines

For Parse and To JSON, paste the whole address or just the query. For Build, write one parameter per line, such as q=café au lait, without encoding anything yourself.

3

Check the Table and the Counts

The table lists every name and value. Parameters counts the rows and Distinct names counts unique names, so a gap between the two means some names repeat.

4

Copy or Download the Result

Copy the lines, the JSON or the built ?query into your code, test or browser. To edit a link, Parse it, change the lines, then switch to Build and copy the new query.

Worked Examples

Real Queries Parsed and Built

Each input on the left went through the editor in the mode its chip names, and the right side is the text it produced, error lines included. Try predicting each one first.

REF_001Parse, plus as space

“https://shop.example.com/search?q=running+shoes&size=10&color=blue”

REF_002Parse, campaign link

“https://example.com/?utm_source=newsletter&utm_medium=email&utm_campaign=spring%20sale”

REF_003To JSON, repeated name

“?tag=red&tag=blue&tag=green&page=2”

REF_004Parse, nested redirect

“/login?returnTo=%2Fdashboard%3Ftab%3Dbilling”

REF_005Build, accents and spaces

“q=café au lait sort=price & rating include=a,b”

REF_006Build, symbols

“discount=100% note=C++ & C#”

REF_007To JSON, bad escape kept

“?q=100%zz&flag”

REF_008Fragment, not a query

“https://example.com/docs#section?x=1”

REF_009Space in the host

“https://exa mple.com/?q=1”

REF_010Build, missing equals

“q=shoes size 10”

Anatomy

How a Query String Is Put Together

The URL Standard gives a query only a few rules. Most bugs come from forgetting one of these ten.

01 / THE

The Question Mark Starts the Query

The first question mark ends the path, and everything up to # is the query. A second question mark is just part of a value.

“Where does the query string begin?”

02 / AMPERSANDS

Ampersands Separate Parameters

Each & starts a new name=value pair. An ampersand that belongs inside a value has to travel as %26.

“How is a literal & sent inside a value?”

03 / THE

The First Equals Sign Splits Name From Value

In r=x=y the name is r and the value is x=y, because later equals signs belong to the value. Encoding them as %3D avoids any doubt.

“In r=x=y, what is the value?”

04 / PLUS

Plus Means Space in a Query

Query strings use form encoding, where + stands for a space. A real plus sign has to be written %2B.

“How does q=a+b decode?”

05 / PERCENT

Percent Escapes Carry Everything Else

Bytes outside the safe set travel as % plus two hex digits, with non-ASCII text turned into UTF-8 first. That is why é takes two escapes.

“How is é written in a built query?”

06 / NAMES

Names Can Repeat

Writing tag=red&tag=blue is legal and gives tag two values. Servers disagree on whether they keep the first, the last or both.

“How many values does tag have in tag=red&tag=blue?”

07 / A

A Name Without a Value Is Allowed

Both ?flag and ?flag= mean a parameter whose value is the empty string. Build always writes the second form.

“What value does ?flag carry?”

08 / THE

The Fragment Ends the Query

Everything after # is the fragment, which the browser keeps to itself. A question mark inside the fragment doesn’t start a query.

“Does x=1 after a # reach the server?”

09 / ORDER

Order Is Kept

URLSearchParams keeps parameters in the order they were written, and so does this editor. Signing schemes such as AWS Signature Version 4 sort them by name before signing.

“Does reordering parameters change a signed URL?”

10 / BRACKETS

Brackets Are a Server Convention

To the URL Standard, items[]=1 and user[name]=Ada are ordinary names that contain brackets. PHP, Rails and the qs library turn them into arrays and objects.

“What is items[] to the URL itself?”

How Servers Read the Same Query

The URL is identical everywhere, but frameworks disagree about repeated names, blanks and brackets.

Browsers and Node.js

URLSearchParams in every browser and in Node.js follows the WHATWG URL Standard, the same parser this editor uses. Its get method returns the first value of a repeated name, and getAll returns every one.

PHP

$_GET keeps only the last value of a repeated name unless the name ends in [], as in tag[]=red. Dots and spaces in names are turned into underscores.

Python

urllib.parse.parse_qs gives a list for every name and drops blank values unless keep_blank_values is true. parse_qsl returns ordered pairs instead.

Express and the qs Library

Express 4 parses queries with qs by default, building nested objects from user[name]=Ada and arrays from repeated names. Express 5 made the simple parser the default.

Ruby on Rails

Rack reads user[name]=Ada as a nested hash and tag[]=red as an array. A repeated name without brackets keeps only its last value.

Java Servlets

request.getParameter returns the first value of a repeated name, and getParameterValues returns all of them. Query parameters and form fields from a POST end up in one map.

Query String Mistakes to Avoid

Most broken links come from string-gluing a query by hand, or from a server reading it differently than you expected.

Tip 01

Escape Values, Not the Whole Query

Gluing ?a=1&b=2 together by hand breaks as soon as a value contains & or =. Use Build here, or URLSearchParams in code, so each value is escaped on its own.

Tip 02

Don’t Paste Encoded Text Into Build

Build expects plain text, so q=a%20b comes out as q=a%2520b. Run Parse first when the values you have are already encoded.

Tip 03

Plus Signs Turn Into Spaces

A literal plus, as in C++, reads back as a space once the query is parsed. Build writes it as %2B, which every parser decodes correctly.

Tip 04

Repeated Names Mean Different Things

PHP keeps the last tag, Java the first, and Python all of them. Avoid repeats unless your server documents how it reads them.

Tip 05

Tokens in a Query Get Logged

Query values end up in server logs, proxy logs, browser history and analytics tools. Send API keys and session tokens in a header or a POST body instead.

Tip 06

Long Queries Get Rejected

Browsers accept very long URLs, but servers often don’t: nginx answers 414 when the request line outgrows its 8 KB header buffer. Move bulky filters into a POST body.

Tip 07

Signed URLs Can’t Be Edited

Presigned S3 links and similar URLs carry a signature computed over the query. Adding, changing or reordering a parameter makes the request fail with a signature error.

Tip 08

Names Are Case-Sensitive

Page=2 and page=2 are different parameters. A server that reads page silently ignores the capitalised one.

Where a Query String Editor Helps

Anywhere a link carries data you need to read, check or rewrite.

Checking a Campaign Link

Paste a UTM link before it goes out to confirm utm_source, utm_medium and utm_campaign are spelled right and decode cleanly. One typo splits a campaign across two rows in your reports.

Following a Sign-In Redirect

Parse returnTo, redirect_uri or next to see where users go after logging in. The nested address is decoded once, so its own path and query are readable.

Debugging a Filter Page

Copy the address of a filtered product list to see every filter, sort and page parameter as a row. Repeated filters appear as separate rows in order.

Writing an API Request

Type the parameters as plain lines, Build them, and append the result to the endpoint in curl or Postman. Spaces, ampersands and accents are encoded for you.

Turning a Query Into Test Data

To JSON gives an object you can paste into a unit test or a mocked request. Repeated names come out as arrays, which shows what a handler built on qs will receive.

Stripping Tracking Parameters

Parse a shared link, delete the fbclid, gclid and utm lines, then Build what’s left. Append the new query to the page address for a clean link.

Reading OAuth and Payment Callbacks

Callback URLs often carry code, state and error parameters. Parse them to read each value without decoding percent escapes by hand.

Frequently Asked Questions