A web address is a stack of parts held together by punctuation. Paste one in and it falls apart into colour — hover, tap or arrow along any piece to find out what it actually does, then edit the parameters and watch the address rebuild itself on every keystroke.
The split follows the shape web addresses have agreed on for decades: an optional scheme up to the
first colon, an optional authority after // (sign-in details, host, port), then the
path, then everything after the first ? is the query, then everything after the
first # is the fragment. Later ? and # characters are just
ordinary text inside whichever part they landed in.
Query parameters are a convention rather than a rule. Pairs joined by & and split on the
first = is what every web framework expects, and it is what this page does — but a server is
free to read the query however it likes. Repeated names are kept as separate rows, because that is usually
deliberate.
Inside a query, + and %20 both mean a space; everywhere else in the address a
+ is just a plus sign. The spaces as + toggle rewrites between the two forms, so the
address changes while its meaning does not.
Two things this deliberately does not do: it does not convert accented host names into their
xn-- ASCII form, and it does not tidy the address up (no lower-casing the host, no collapsing
/./). You see what you typed, split up — not what a browser would clean it into.