[Überarbeitet]
Die Antwort ist, weil PHP es nicht behandelt (und es ist kein Fehler):
%Vor%Der erste ist der Standard, der zweite nur, wenn Sie Dateien hochladen.
@Alohci lieferte eine Erklärung, warum PHP $_POST
array nicht auffüllt, sondern den Wert in einer Variablen $HTTP_RAW_POST_DATA
speichert.
Beispiel was mit text/plain
enctype schiefgehen kann:
file1.php:
%Vor%file2.php:
%Vor%Ergebnis:
%Vor% Keine Unterscheidung zwischen dem Wert der Variablen input1
und input2
möglich. Es kann
abc\r\ninput2=def
, input2 = ghi
sowie abc
, input2 = def\r\ninput2=ghi
Kein Problem bei der Verwendung der anderen beiden oben erwähnten Kodierungen.
Der Unterschied zwischen GET und POST:
enctype="text/plain"
schreiben - nur wird vom Browser ignoriert, Sie können es mit Wireshark testen, um die Anfragepakete zu scannen), text/plain
oder application/x-www-form-urlencoded
senden möchten, aber die Der zweite ist die einzige eindeutige Lösung. HTML5 legt fest, wie Formulardaten formatiert werden sollen, die als text/plain
übergeben werden: Ссылка .
Am Ende dieses Abschnitts steht:
Payloads, die das text / plain-Format verwenden, sollen menschlich sein lesbar. Sie sind vom Computer nicht zuverlässig interpretierbar, wie der Das Format ist mehrdeutig (es gibt beispielsweise keine Möglichkeit, a zu unterscheiden Literal Newline in einem Wert von der Newline am Ende des Wertes).
Es ist also nicht unvernünftig, dass PHP nicht versucht, es zu interpretieren und es nur in roher Form verfügbar macht. Das scheint mir der richtige Ansatz zu sein.