[Überarbeitet]
Die Antwort ist, weil PHP das nicht kann (und es ist kein Fehler):
https://bugs.php.net/bug.php?id=33741
Valid values for enctype in <form> tag are:
application/x-www-form-urlencoded
multipart/form-data
Die erste ist die Standardeinstellung, die zweite benötigen Sie nur, wenn Sie Dateien hochladen.
@Alohci eine Erklärung, warum PHP die Daten nicht ausfüllt $_POST
Array, sondern speichern den Wert in einer Variablen $HTTP_RAW_POST_DATA
.
Beispiel dafür, was schiefgehen kann bei text/plain
enctype:
file1.php:
<form method="post" enctype="text/plain" action="file2.php">
<textarea name="input1">abc
input2=def</textarea>
<input name="input2" value="ghi" />
<input type="submit">
</form>
file2.php:
<?php
print($HTTP_RAW_POST_DATA);
?>
Ergebnis:
input1=abc
input2=def
input2=ghi
Keine Möglichkeit zu unterscheiden, was der Wert von input1
y input2
Variablen. Sie kann sein
- input1=
abc\r\ninput2=def
, input2= ghi
sowie
- input1=
abc
, input2= def\r\ninput2=ghi
Bei der Verwendung der beiden anderen genannten Kodierungen gibt es keine derartigen Probleme.
Der Unterschied zwischen GET und POST:
- in GET sind die Variablen Teil der URL und sind in der URL als Abfragezeichenfolge vorhanden, daher sind sie muss URL-verschlüsselt sein (und das sind sie, auch wenn Sie
enctype="text/plain"
- wird vom Browser einfach ignoriert; Sie können dies mit Wireshark testen, um die Anforderungspakete abzufangen),
- Beim Senden von POST sind die Variablen nicht Teil der URL, sondern werden als letzter Header in der HTTP-Anfrage (POSTDATA) gesendet, und Sie können wählen, ob Sie sie als
text/plain
o application/x-www-form-urlencoded
aber die zweite ist die einzige nicht eindeutige Lösung.