2012-04-06 5 views
0

標準のCakePHP URLスキーマを使用するCakePHPアプリケーションを開発しています。CakePHPはURLの "+"から ""にエスケープしません

私はコントローラーで、次の機能を使用する場合:

class IndexController extends AppController { 
    public $uses = false; 
    public function test($a) { 
     var_dump($a); 
    } 
} 

そして、このURLでそれを呼び出す:

string(11) "Hello++Test" 

私が期待する:

http://server/index/test/Hello+%2BTest 

私はこの結果を得ます最初の "+"はエスケープ解除され ""ます。なぜこれは起こりませんか?

答えて

1

「アンエスケープ」ではなく「アンコード」を意味すると思います。

おそらく、+記号がURLの有効な文字であるためです。 URLエンコードされた文字(%xxなど)のみが「読み取り可能な」文字に変換されます。 (これはApacheで行われ、ケーキではないことは確かですが)

強制的に変換したい場合は、PHPのurldecode()関数を使用して実行することができます。 RFC 1738から

: "$!-_ * '()、+"

はこのように、唯一の英数字、特殊文字は、その予約された目的に使用される予約文字はURLの中にエンコードされていない使用することができます。

+0

ご回答ありがとうございます。 +記号はURL内の有効な文字だと言っていたので、スペースは誤ってエンコードされていたクライアント側でエラーが発生していました。 (私は 'urldecode()'を使用することができませんでした。なぜなら、これは、両方のプラス符号をスペースにデコードするからです) – flo

関連する問題