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.
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 [3]:
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"