This has very little to do with cake.

A URI has reserved characters which must be escaped (see RFC 3305).
The data (query part of the URI) of a GET request is interpreted as
the mime type `application/x-www-form-urlencoded` which has some
legacy encoding rules, including the substition of + for a space.

See http://en.wikipedia.org/wiki/Percent-encoding for more details.

While you might argue that your data is technically in the path part
of the uri, not in the query part, cakephp's .htaccess file encodes
all path data to a query value called 'url', so it is then subject to
those nasty legacy rules. This behavior is not specific to cakephp;
it's very widespread.

I'm not sure what you can do about your specific problem. I've never
ran into it; the closest I got was when I wanted to process '+' and
'-' characters to sort data (eg: '/sort:+title-price+whatever', and I
achieved that by treating a space as a plus character.

Sounds like a thorny issue though; how do you tell if the space was
meant to be a space or a plus? Can you check any of the following
server variables and get the correct result?

 $_SERVER['REDIRECT_QUERY_STRING'];
 $_SERVER['REDIRECT_URL'];
 $_SERVER['REQUEST_URI'];

For me (Apache 2.2, PHP 5.2.6), using the following url, I get these
results

URL (typed) "http://localhost/website/controller/test:one+two-three/
this:has a space"

[REDIRECT_QUERY_STRING] => url=controller/test:one+two-three/this:has
a space
[REDIRECT_URL] => /website/app/webroot/controller/test:one+two-three/
this:has a space
[QUERY_STRING] => url=controller/test:one+two-three/this:has a space
[REQUEST_URI] => /website/controller/test:one+two-three/this:has%20a
%20space

So it must be possible to get the correct parameters, if this works
the same way on all servers.

hth
grigri

On Nov 21, 6:16 am, Oliver <[EMAIL PROTECTED]> wrote:
> Hi,
>
> I've a problem where I pass parameter using GET to an action that
> contains a plus ("+") sign. It will always get replaced by a space
> character before becoming accessible in the action. Everything I've
> tried failed, either using the different types to pass the parameter
> (names, etc). I haven't tried a POST yet but wanted to ask here if
> this is a known and wanted behavior or if I may have run into a bug.
>
> Here an example of a url I try to call:
>
> blah.com/profiles/import/Y%2bI6hLyjY7ryHiwIHenWYg%3d%3d
>
> Here the result when printing the params array:
>
> Array ( [url] => profiles/import/Y I6hLyjY7ryHiwIHenWYg== )
>
> It doesn't help if I provide the parameter in decoded form, same
> result.
>
> I'm using 1.2 RC3.
>
> Any help highly appreciated!
>
> Thanks,
>   Oliver
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"CakePHP" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to