Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it valid to have more than one question mark in a URL?

I came across the following URL today:

http://www.sfgate.com/cgi-bin/blogs/inmarin/detail??blogid=122&entry_id=64497 

Notice the doubled question mark at the beginning of the query string:

??blogid=122&entry_id=64497 

My browser didn't seem to have any trouble with it, and running a quick bookmarklet:

javascript:alert(document.location.search); 

just gave me the query string shown above.

Is this a valid URL? The reason I'm being so pedantic (assuming that I am) is because I need to parse URLs like this for query parameters, and supporting doubled question marks would require some changes to my code. Obviously if they're in the wild, I'll need to support them; I'm mainly curious if it's my fault for not adhering to URL standards exactly, or if it's in fact a non-standard URL.

like image 857
Bungle Avatar asked May 27 '10 19:05

Bungle


People also ask

What do question marks mean in URLs?

The question mark ("?", ASCII 3F hex) is used to delimit the boundary between the URI of a queryable object, and a set of words used to express a query on that object. When this form is used, the combined URI stands for the object which results from the query being applied to the original object.

What's after the question mark in a URL?

It's called the "query string", as you can see on Wikipedia. Show activity on this post. The query.

Should question mark in URL be encoded?

A question mark URL encodes as %3F . But you should use a proper encoder for the whole thing rather than manually encoding a character. Show activity on this post. According to my experience of trying to make a JavaScript search engine that links to Google, just replace the question marks with %3F.


Video Answer


1 Answers

Yes, it is valid. Only the first ? in a URL has significance, any after it are treated as literal question marks:

The query component is indicated by the first question mark ("?") character and terminated by a number sign ("#") character or by the end of the URI.

...

The characters slash ("/") and question mark ("?") may represent data within the query component. Beware that some older, erroneous implementations may not handle such data correctly when it is used as the base URI for relative references (Section 5.1), apparently because they fail to distinguish query data from path data when looking for hierarchical separators. However, as query components are often used to carry identifying information in the form of "key=value" pairs and one frequently used value is a reference to another URI, it is sometimes better for usability to avoid percent-encoding those characters.

https://www.rfc-editor.org/rfc/rfc3986#section-3.4

like image 61
Amber Avatar answered Sep 18 '22 18:09

Amber