Thanks for confirming. I will send Massimo a patch.
On Dec 23, 11:56 am, Jonathan Lundell <jlund...@pobox.com> wrote: > On Dec 23, 2010, at 9:29 AM, Jonathan Lundell wrote: > > > > > > > > > > > > > On Dec 23, 2010, at 9:09 AM, mr.freeze wrote: > > >> Given this url: > >> URL(args=1,vars=dict(v='yes'),anchor='end') > >> It produces: > >>http://server/app/default/index/1#end?v=yes > >> Problem: > >> request.vars is empty > > >> This url: > >>http://server/app/default/index/1?v=yes#end > >> request.vars is populated and the anchor works > > >> Shouldn't the anchor be at the end of the query string? I'm running > >> the latest trunk. > > > Yes; that's an error, per RFC 3986. > > > URI = scheme ":" hier-part [ "?" query ] [ "#" fragment ] > > > Not only that, but '?' is legal in a fragment identifier, as is '=', so in > > your first example, "end?v=yes" is itself the entire (legal) anchor. > > > I wouldn't be terribly surprised if some browsers treated this > > inconsistently, but we should be adhering to the RFC here. > > > The fix looks easy; change: > > > if anchor: > > other += '#' + urllib.quote(str(anchor)) > > if vars: > > other += '?%s' % m_vars > > > to: > > > if vars: > > other += '?%s' % m_vars > > if anchor: > > other += '#' + urllib.quote(str(anchor)) > > > ...and fix the doctest. Though I'm not sure that urllib.quote is right for > > an anchor. > > Following up: as I read the RFC, the quoting doesn't hurt.