-- Decode an urlencoded string.
-- Returns the decoded value.
-function urldecode( str )
+function urldecode( str, no_plus )
local function __chrdec( hex )
return string.char( tonumber( hex, 16 ) )
end
if type(str) == "string" then
- str = str:gsub( "+", " " )
+ if not no_plus then
+ str = str:gsub( "+", " " )
+ end
+
str = str:gsub( "%%([a-fA-F0-9][a-fA-F0-9])", __chrdec )
end
end
function Simple.handle_get(self, request, sourcein, sinkerr)
- local file, stat = self:getfile( self.proto.urldecode( request.env.PATH_INFO ) )
+ local file, stat = self:getfile( self.proto.urldecode( request.env.PATH_INFO, true ) )
if stat then
if stat.type == "regular" then
elseif stat.type == "directory" then
local ruri = request.request_uri:gsub("/$","")
- local duri = self.proto.urldecode( ruri )
+ local duri = self.proto.urldecode( ruri, true )
local root = self.docroot:gsub("/$","")
-- check for index files