Skip to content

URL Parser & Query Editor

Splits a URL into its parts, shows query parameters as an editable table and rebuilds the result.

Breaks a URL into its parts, turns the query string into a table you can edit, and rebuilds the URL as you go. The second half is the one people do not know they need: a panel saying what the parser silently changed, which is usually the answer to "it works in curl and not in the browser".

🔒 Runs entirely in your browserurlparsequerydebug

A bare host works too — https:// is assumed and the assumption is reported below.

Protocol

https:

Host

example.com

Port

(default)

Origin

https://example.com

Path

/products/42

Fragment

#reviews

Path segments

  1. products
  2. 42

Query parameters (4, 2 tracking)

  • Google Analytics campaign source
  • Google Analytics campaign medium
  • raw: price+desc

Normalised URL

https://example.com/products/42?utm_source=newsletter&utm_medium=email&id=42&sort=price%20desc#reviews

Encode and decode
  • Query value

    a%20b%2Fc%2Bd%26e%3Df

    Everything reserved is escaped, including !'()* which encodeURIComponent leaves alone. Space is %20.

  • Form body (application/x-www-form-urlencoded)

    a+b%2Fc%2Bd%26e%3Df

    The same, but space is + — which is why a + in a form value must be sent as %2B.

  • Path segment

    a%20b%2Fc%2Bd%26e%3Df

    A slash must be escaped or it splits the path; a plus is a literal plus here, not a space.

  • Fragment (#…)

    a%20b/c+d&e=f

    The most permissive part of a URL: ? / : @ and more are all legal unescaped.

  • Whole URL (encodeURI)

    a%20b/c+d&e=f

    Leaves the structural characters intact. Only correct when the input really is a whole URL.

The URL is parsed in this page and never requested. Nothing is fetched, no redirect is followed, and a URL containing a session token or a signed link stays in this tab.

How to use it

  1. Paste the URL

    A bare host is accepted and https:// assumed — and the assumption is reported rather than hidden. A data: URL is described instead of parsed.

  2. Edit the query as rows

    Fifteen tracking parameters are unreadable on one line and obvious as fifteen rows. Tracking ones are marked by name, and one button removes all of them at once.

  3. Read what the parser changed

    A lower-cased host, a punycoded international name, a resolved .. segment — all silent, all invisible in the URL you pasted, and all capable of making the same string behave differently in two clients.

  4. Use the encoder panel for signature bugs

    The same string is shown under every encoding rule at once. A plus sign in a query value and in a path segment do not encode the same way, and seeing both side by side is what makes that visible.

Common questions

Is the URL fetched?

No. It is parsed in the page and never requested — no fetch, no redirect followed. A URL carrying a session token or a signed link stays in this tab.

Is removing utm_ parameters safe?

For the destination page, yes — these are read by analytics, not by the application. The exception is a link whose parameters are signed or whose id the page actually needs, so check what is left before you share it.

What does "encoded twice" mean?

The value passed through two systems that each helpfully percent-encoded it, so %2520 is a space that became %20 and then had its % encoded again. It is a common cause of a redirect target arriving mangled.

Why did my uppercase host become lowercase?

Host names are case-insensitive and the URL standard normalises them. The path is not — /Page and /page are different resources — which is why only one half of the URL changes.

Feed it from

Next

These accept what this tool produces, so the result can go straight in.