2012-04-06 3 views
0

Ich entwickle eine CakePHP-Anwendung, die das Standard-CakePHP-URL-Schema verwendet.CakePHP nicht "+" zu "" in einer URL

Wenn ich die folgende Funktion in einem Controller verwenden:

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

Und mit dieser URL aufrufen:

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

ich dieses Ergebnis:

string(11) "Hello++Test" 

Ich würde erwarten, das erste "+" ist zu "" unescaped "". Warum passiert das nicht?

Antwort

1

Ich denke, du meinst "unencode" statt "unescape".

Dies geschieht wahrscheinlich, weil das Zeichen + ein gültiges Zeichen für eine URL ist. Nur die urlencodierten Zeichen (d. H.% Xx) werden wieder in "lesbare" Zeichen umgewandelt. (obwohl ziemlich sicher, dass dies von Apache, nicht Kuchen getan wird)

Wenn Sie die Konvertierung erzwingen wollen, können Sie es einfach durch PHP urldecode() Funktion ausführen.

Von RFC 1738:

also nur alphanumerische Zeichen, die Sonderzeichen "! $ -_ + * '()" und reservierte Zeichen für ihre reservierten Zwecke verwendet wird, kann innerhalb einer URL nicht codierten verwendet werden .

+0

Vielen Dank für Ihre Antwort. Wie Sie sagten, ist das + Zeichen ein gültiges Zeichen in der URL, so dass der Fehler auf der Client-Seite war, wo der Speicherplatz falsch codiert wurde. (Ich konnte 'urldecode()' nicht verwenden, da das beide Pluszeichen in Leerzeichen dekodieren würde) – flo