method="post" enctype="text / plain" sind nicht kompatibel?

8

Wenn ich

benutze %Vor%

Formulardaten können nicht ordnungsgemäß in die proc.php-Datei gesendet werden. Warum? Was ist das Problem? Warum kann ich nicht Text / Plain-Encoding mit Post verwenden, aber ich kann es mit Get-Methode verwenden?

    
Narek 02.10.2011, 18:11
quelle

2 Antworten

21

[Ü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

sein
  • input1 = abc\r\ninput2=def , input2 = ghi sowie
  • input1 = abc , input2 = def\r\ninput2=ghi

Kein Problem bei der Verwendung der anderen beiden oben erwähnten Kodierungen.

Der Unterschied zwischen GET und POST:

  • in GET sind die Variablen Teil der URL und sind in der URL als Query String vorhanden, daher müssen sie URL-codiert sein (und sie sind, auch wenn Sie enctype="text/plain" schreiben - nur wird vom Browser ignoriert, Sie können es mit Wireshark testen, um die Anfragepakete zu scannen),
  • Beim Senden von POST sind die Variablen nicht Teil der URL, sondern werden als letzte Kopfzeile in HTTP-Anforderung (POSTDATA) gesendet, und Sie können wählen, ob Sie sie als text/plain oder application/x-www-form-urlencoded senden möchten, aber die Der zweite ist die einzige eindeutige Lösung.
jakub.g 02.10.2011, 18:52
quelle
10

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.

    
Alohci 02.10.2011 18:42
quelle

Tags und Links