Here is a citation from [1], see the section "Query strings":
Within the query string, the plus sign is reserved as shorthand notation for a space. Therefore, real plus signs must be encoded. This method was used to make query URIs easier to pass in systems which did not allow spaces.
But [2], a similar and chronologically next document, has not include anything like the above paragraph. None of the later RFCs have mentioned such an information about plus-encoded spaces.
Moreover [3], the section "3.2.3 URI Comparison" states:
Characters other than those in the "reserved" and "unsafe" sets
(see RFC 2396) are equivalent to their "% HEX HEX" encoding.
Nevertheless, lots of Web browsers and other applications follow the first rather odd recommendation in full or partially.
Ystok-URI interprets the space (' ') and plus ('+') characters as per [4]:
Please confront the following.
(uri:percent-decode "+") => "+" (hunchentoot:url-decode "+") => " " (uri:percent-encode " ") => "%20" (hunchentoot:url-encode " ") => "%20" (drakma:url-encode " " :utf-8) -> "+" (uri:percent-encode "+") => "%2B" (hunchentoot:url-encode "+") => "%2B"