Parse a query string into its parameters

Split a web address into scheme, host, port, path, query and fragment, and list every parameter. Nothing leaves your browser.

A query string is the part of a link after the question mark, such as utm_source=newsletter&size=42&size=43. Reading one by eye gets hard fast: values are percent-sequences, spaces are plus signs, the same key can appear twice and a long campaign link can hold twenty parameters. This page opens ready for exactly that. Paste the text with or without the leading question mark and you get a table with one row per parameter, in the order written, showing the key, the decoded value and the raw value. A repeated key keeps every copy, a key with no equals sign is marked, and empty segments are skipped. The plus option decides whether a + counts as a space, which is how forms write it, or stays a plus. If you paste a whole link by mistake, switch the choice above the box to A full URL to see its scheme, host and path as well. Anything after a # in the pasted text is treated as the fragment and ignored.

How it works

  1. Paste a full URL
  2. Read the parts and the parameter table
  3. Copy the part you need

How the address is split

The parser cuts the address in a fixed order. The fragment is everything after the first #. The query is everything after the first ? that comes before it. The scheme is the letters before the first colon, such as https or mailto. If the rest starts with //, what follows up to the next / is the authority: optional username and password, then the host, then an optional port. Credentials are split at the last @, and the password starts after the first colon in them. An IPv6 host in square brackets, such as [::1]:3000, is kept whole. What remains is the path. Addresses without // after the scheme, such as mailto:a@b.co or tel:+1555, have a scheme and a path but no host. A protocol-relative address that starts with // has an empty scheme.

Ports and passwords

The port must be a number from 0 to 65535. When the scheme has a well-known port, the tool says so: https has 443, http and ws have 80, wss has 443, ftp has 21, ssh and sftp have 22, ldap has 389 and ldaps has 636. An address with no port shows the default next to it, and an address that writes the default port shows that it can be left out. A password is shown as ••• unless you turn on Show the password, so you can share a screenshot or a copy of the result without leaking it. The username is always shown. Nothing is checked against the real server: the tool reads the text only.

Query parameters

The query is split on &. Every segment becomes one row, in the order written, so a repeated key such as size=42&size=43 appears twice. Only the first = splits a key from its value, so t=a=b has the value a=b. A segment without = has an empty value and is marked. Empty segments between && are skipped. Each value is shown decoded and raw. Decoding turns %XX sequences into UTF-8 text, so %C3%A9 becomes é, and with the plus option on (the default) a + becomes a space, as in form submissions. A + stays a plus when the option is off or when it is written %2B. A broken sequence, such as a lone % or bytes that are not valid UTF-8, is left as written and counted in a notice. The table shows the first 500 parameters; the text box lists all of them.

Limits and scope

Paths are shown as written, not decoded. Host names are shown as typed and are not converted from or to punycode. An address without a scheme gets a message asking for one, since example.com/page could be read in too many ways. To turn text into %-sequences or back, use the Text Encoder. The text is processed in your browser, up to 1,000,000 characters, and is not uploaded or stored.

Frequently asked questions

Do I need to include the question mark?

No. A leading ? is removed if it is there and not needed if it is missing. Paste utm_source=a&utm_medium=b or ?utm_source=a&utm_medium=b and the result is the same.

How are two parameters with the same name shown?

As two rows, in the order they were written. Nothing is merged or overwritten, so you can see exactly what a server would receive.

Why is a plus sign shown as a space?

Forms write a space in a value as +, so the default reads + that way. Turn off the plus option to keep it as a plus sign. A + written as %2B is always a plus.

Why does it say no scheme was found?

The address must start with a scheme such as https:// or mailto:. A bare example.com/page has none, so add https:// in front. If you only have the part after the question mark, use the query string page.

Why is the password hidden?

Addresses with a password are often pasted into tickets and chats. The password shows as ••• until you turn on Show the password. The username and every other part are always shown.

What is the difference between Value and Raw value?

Raw value is the text exactly as written after the equals sign. Value is the same text with %XX sequences turned into characters and, if the plus option is on, each + turned into a space.

Are repeated keys merged?

No. Each one gets its own row in the order it appears. That matters for lists such as size=42&size=43, where servers differ on which copy wins or whether all are used.

Is my URL uploaded?

No. It is parsed in your browser, in this tab, and no server receives it, and the tool does not open the address. Your choices are saved in this browser, the text is not.