Regarding add-query(), the docs say: Intended usage is
?>"> Reload</a> and log in?
The way it works is that if there is an existing value
in QUERY_STRING, add_query() expects self_url() to have
already ouput it. So it uses & as the sepchar and adds
the extra vars onto the end.
If add_query() is called after purl() and with a value
in QUERY_STRING, add_query() assumes QUERY_STRING has
been output, so uses & as sepchar. In fact purl() won't
have output the QUERY_STRING therefore ? would be the
correct spechar, so add_query() does the wrong thing.
There needs to be a series of methods that allow query
strings to be added to arbitrary URLs. I suggest
methods called new_query() and pnew_query(). Usage
These would function just like add_query() except they
would assume QUERY_STRING had not been output.