0

標準のCakePHPURLスキーマを使用するCakePHPアプリケーションを開発しています。

コントローラで次の関数を使用する場合:

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

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

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

私はこの結果を得る:

string(11) "Hello++Test"

最初の「+」は「」にエスケープされていないことを期待します。なぜこれが起こらないのですか?

4

1 に答える 1

1

「エスケープ解除」ではなく「エンコード解除」という意味だと思います。

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

変換を強制したい場合は、PHPのurldecode()関数を使用して実行できます。

RFC 1738から:

したがって、英数字、特殊文字 "$-_。+!*'()、"、およびそれらの予約目的で使用される予約文字のみを、URL内でエンコードせずに使用できます。

于 2012-04-06T19:51:14.870 に答える