[Catalyst] Slash characters in a path argument
Ian Wells
ijw at cack.org.uk
Tue Sep 27 14:41:53 GMT 2011
I have a string I want to use as one argument to a controller. It's
user-sourced and occasionally has slashes in.
I use this as
$c->uri_for('/controller/action', 'string/with/slashes');
(done in TT, as it happens, but the results are the same)
I'd like that argument to be the first argument of my controller. uri_for
doesn't encode the slashed string, so that gives me
/controller/action/string/with/slashes, and misses my one-argument action.
If I URI-encode it, things work better in the Catalyst webserver, <app>_
server.pl
$c->uri_for('/controller/action', 'string%2Fwith%2Fslashes');
The url is then /controller/action/string%2Fwith%2Fslashes and the action is
found; Catalyst even decodes it, and we're laughing.
However, this leads to weird things happening. If you run under
lighttpd/fastcgi, it thoughtfully decodes the slashes for you, which brings
us back to the first case: it misses my 1-argument controller and gets me a
404. Catalyst reports:
[debug] "GET" request for
"content/series/David%20Audley%20/%20Jack%20Butler:%20Chronological%20Order"
from "xx.xx.xx.xx"
[debug] Path is "/"
[debug] Arguments are "content/series/David Audley / Jack Butler:
Chronological Order"
Now, one answer to this is to encode slashes in such strings as
non-uri-encoding. Another is to have special-case actions that can have
slashed arguments in them. A third would be to change lighttpd's behaviour
- there's a bug open for exactly that but no activity on it; also, I suspect
other webservers behave similarly...
Has anyone come up against this before? Any tips?
Cheers,
-- =
Ian.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.scsys.co.uk/pipermail/catalyst/attachments/20110927/8daf9=
b35/attachment.htm
More information about the Catalyst
mailing list