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.
_______________________________________________ List: Catalyst@lists.scsys.co.uk Listinfo: http://lists.scsys.co.uk/cgi-bin/mailman/listinfo/catalyst Searchable archive: http://www.mail-archive.com/catalyst@lists.scsys.co.uk/ Dev site: http://dev.catalyst.perl.org/