2011-10-02 25 views
8

私が使用している場合method = "post" enctype = "text/plain"は互換性がありませんか?

<form method="post" enctype="text/plain" action="proc.php"> 

フォームデータが正しくファイルをproc.phpに送信することはできません。どうして?何が問題ですか?なぜ私はポストでテキスト/プレーンなエンコーディングを使うことができないのですが、私はそれをgetメソッドで使うことができますか?

+6

私はあなたがファイルアップロードを行っている場合を除き、あなたは、ENCTYPEを定義する必要はありませんかなり確信している、それは次のようになります。 にenctype = "multipart/form-データ" [リンク](のhttp:/ /www.w3.org/TR/html4/interact/forms.html#adef-enctype) – rwyland

+1

w3schools([link](http://www.w3schools.com/tags/att_form_enctype.asp))によると、 'application/x-www-form-urlencoded'がデフォルトです。 –

+0

私の質問は、なぜmethod = "post"とenctype = "text/plain"が一緒に動作しないのですか?私のHTMLコードは満足していないし、私が使うべきものも問題ではない!!!!!!!!!!!!!!!!!!! – Narek

答えて

21

[改訂] PHPがそれを処理しない(と、それはバグではありません)ので、答えは、次のとおりです。

https://bugs.php.net/bug.php?id=33741

Valid values for enctype in <form> tag are: 

application/x-www-form-urlencoded 
multipart/form-data 

最初はデフォルトです、ファイルをアップロードするときに必要なのは2番目のものです。 PHPは$_POST配列を移入が、変数$HTTP_RAW_POST_DATA内の値が格納されていない理由の説明を提供

@Alohci

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); 
?> 

結果:

input1=abc 
input2=def 
input2=ghi 

ありません伸びる方法どのような値のinput1input2変数をguish。前述した他の二つのエンコーディングを使用する場合には、そのような問題

  • INPUT1 = abc\r\ninput2=def、INPUT2 = ghi、ならびに
  • INPUT1 = abc、INPUT2 = def\r\ninput2=ghi

することはできません。

GETとPOSTの違い:GETで

  • 、変数でも、URLの一部であり、クエリ文字列としてURLに存在している、したがって、彼らは URLエンコードされなければなりません(と彼らはenctype="text/plain"と書くと、ブラウザで無視されるだけで、Wiresharkを使ってリクエストパケットを盗聴することができます)、
  • POSTを送信すると、変数はURLの一部ではなくHTTPの最後のヘッダーとして送信されますリクエスト(POSTDATA)を送信し、それらをtext/plainまたはapplication/x-www-form-urlencoded、buとして送信するかどうかを選択できます第2のものは曖昧でない唯一の解です。
+3

[HTML5](http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#attr-fs-enctype)によると、 'text/plain'は3番目に有効なcontent- enctypeを入力します。フォーマットはhttp://dev.w3.org/html5/spec/association-of-controls-and-forms.html#plain-text-form-dataで説明されています。 – Alohci

+0

素敵なテーブルはこちら[こちら](http://www.w3schools.com/tags/att_form_enctype.asp)(私はすでに投稿しました) –

+5

真実、私はw3schoolsの言葉は信じられません。 – Alohci

10

HTML5では、と提出されたフォームデータをtext/plainとしてフォーマットする方法を定義しています。そのセクションの下部にある

、それは言う:text/plainの形式を使用して

ペイロードが読める 人間であることを意図しています。 形式はあいまいです(たとえば、値の末尾にある改行文字から改行文字を区切る方法がありません)ため、コンピュータで確実に解釈することはできません。

PHPはそれを解釈しようとせず、生のままでしか利用できないということは無理ではありません。私には、それは正しいアプローチのようです。

関連する問題