method="post" enctype="text/plain" nicht kompatibel sind?
Wenn ich
<form method="post" enctype="text/plain" action="proc.php">
Formular-Daten können nicht gesendet werden proc.php Datei ordnungsgemäß. Warum? Was ist das problem? Warum kann ich nicht verwenden, text/plain, encoding, mit der post, aber ich kann mit get-Methode?
- Ich bin mir ziemlich sicher, dass Sie nicht brauchen, um zu definieren, enctype, es sei denn, du machst eine Datei hochladen, dann sollte es sein: enctype="multipart/form-data" link
- Laut w3schools (link),
application/x-www-form-urlencoded
ist Standard. - Meine Frage ist, warum method="post" und enctype="text/plain" arbeiten nicht zusammen? Mein HTML-code nicht metter und was soll ich verwenden, egal zu!!!!!!!!!!!!!!!!!!!
- Was bedeutet "kann nicht gesendet werden proc.php Datei ordnungsgemäß" bedeutet genau? Was bedeutet der resultierende http-post Aussehen?
- Mein html-code war nicht dachte, in den text der Frage, sorry. Ich habe korrigiert.
- Ich gehe davon aus, dass der browser nicht wissen, was zu tun, da es kein gültiges token. Ich Wette, der browser behandelt enctype="text/plain" das gleiche wie enctype="cheeseburger", es tut sich nix....
- Was ist der use case für den Wunsch, dies zu tun? Welche Informationen würden Sie erwarten, dass die browser stellen den Inhalt der content-Typ "text/plain"?
- Was ist der nutzen text/plain mit get-Methode?
- Tatsächlich, mit
method="post" enctype="text/plain"
browser sendet die Daten, und PHP speichert es in$HTTP_RAW_POST_DATA
ist, aber es nicht Auffüllen$_POST
. Wie auch immer, warum Sie darauf bestehen, mittext/plain
? - Nachrichten sollten keinen Inhalt Körper überhaupt. HTTP-1.1-spec, Abschnitt 7.3, sagt "Einrichtungen, die auf GET-Anfragen haben keine definierte Semantik. Beachten Sie, dass das senden eines Körpers auf eine GET-Anfrage könnte dazu führen, dass einige bestehende Implementierungen, den Antrag abzulehnen."
- Ich habe keine Ahnung, warum die Frage geschlossen wurde. Es ist eine gute Frage, die hat bereits eine sehr gute Antwort.
Du musst angemeldet sein, um einen Kommentar abzugeben.
[Überarbeitet]
Die Antwort ist, weil PHP nicht umgehen (und es ist kein bug):
https://bugs.php.net/bug.php?id=33741
Die erste ist die Standard -, die zweite müssen Sie nur, wenn Sie Dateien hochladen.
@Alohci zur Verfügung gestellt Erklärung, warum PHP nicht Auffüllen
$_POST
array, sondern speichern den Wert in eine variable$HTTP_RAW_POST_DATA
.Beispiel dafür, was schief gehen kann, mit
text/plain
enctype:file1.php:
file2.php:
Ergebnis:
Keine Möglichkeit, zu unterscheiden, was ist der Wert von
input1
undinput2
Variablen. Es kann sein,abc\r\ninput2=def
, input2=ghi
sowieabc
, input2=def\r\ninput2=ghi
Kein solches problem bei der Verwendung der beiden anderen Codierungen erwähnt.
Den Unterschied zwischen GET und POST:
enctype="text/plain"
- es wird nur vom browser ignoriert; Sie können es testen mit Wireshark sniffen die request-Pakete),text/plain
oderapplication/x-www-form-urlencoded
, aber der zweite ist der einzige nicht-mehrdeutige Lösung.text/plain
ist ein Drittel gültigen content-type für enctype. Das format ist beschrieben in dev.w3.org/html5/spec/....HTML5 nicht definieren, wie zu formatieren, Formular Daten übermittelt, als
text/plain
hier: https://w3c.github.io/html/sec-forms.html#plain-text-form-data.Unten in dem Abschnitt, es sagt:
Also ist es nicht abwegig, dass PHP nicht versucht, Sie zu interpretieren und macht es nur verfügbar in roher form. Das scheint mir der richtige Ansatz.