Hello,
POST-Daten werden serverseitig, so sagt das Protocol HTTP, aus STDIN gelesen. Dazu hast Du ja schon den richtigen Header im Request: Content-Length. Diese Länge, in bytes, nimmt die serverseitige Anwendung zum Auslesen des Standard-Eingabekanals mit der exakten Länge. Das ist ersteinmal unabhängig von PHP, das ist rein HTTP. Hat der Serverprozess STDIN gelesen, geht es ans Parsen, dies ist wiederum vom Request-Header abhängig, was da zu tun ist.
In Deinem Fall, mit dem Req-Header
Content-Type: application/x-www-form-urlencoded; charset=utf-8erwartet der Parser Schlüssel=Werte Paare, von denen mehrere mit dem Ampers-and oder mit dem ";" getrennt sind like
a=1;a=2;a=3;b=4;c=5&d=6&x=yusw. Die Werte selbst sind encodet mit dem Prozent-Zeichen für bytes, die Spezial-Chars darstellen würden (z.B. Leerzeichen u.a.). Dies ist ebenfalls immer noch unabhängig von PHP, das ist rein HTTP. Btw., die Charset-Angabe im Request-Header ist optional.
Dabei handelt es sich im obigen Fall auch um das Content-Encoding, nicht um das Content-Transfer-Encoding. Das bildet eine zweite "Kodierungs-Hülle".
Muss das eigentlich immer zwingend urlencoding sein, bei HTTP, oder könnte man auch ein anderes Transfer-Encoding verwenden? War mir doch so, dass jede in die URL-Encoding passende Codierung erlaubt ist, z.B. base64. Der Parser müsste mMn also das Transfer-Encoding auch beachten. Vielleicht kennt ja jemand die passende Stelle in den RFC?
Ein anderer Content-Type wäre z.B. multipart/form-data, hierbei besteht der Message-Body, wie der Name schon sagt, aus mehreren Teilen, die durch eine boundary (deklariert im Req-Header) getrennt sind. Die Einzelteile zurückzugewinnen, das ist wiederum Aufgabe des Parsers.
PHP nun, ist soweit entwickelt, dass es anhand des im Req-Header deklarierten Content-Type STDIN lesen kann und Dir im Script die Einzelteile präsentiert. Schick mal anstelle eines Einzelstrings ein paar Schlüssel-Wertepaare mit og. Content-Type, dann findest Du die Werte im POST-Arry.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg