method = "post" enctype = "text / plain" не совместимы?

Когда я использую

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

данные формы не могут быть отправлены в файл proc.php должным образом. Зачем? В чем проблема? Почему я не могу использовать текстовую / обычную кодировку с сообщением, но я могу использовать ее с методом get?

[ После доработки]

Ответ в том, что 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 

Первый – по умолчанию, второй – только при загрузке файлов.

@Alohci предоставил объяснение, почему PHP не заполняет массив $_POST , но сохраняет значение внутри переменной $HTTP_RAW_POST_DATA .

Пример того, что может пойти не так с 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 

Невозможно отличить значение переменных input1 и input2 . Может быть

  • 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 , но второе – единственное недвусмысленное решение.

HTML5 определяет, как форматировать данные формы, представленные как text/plain здесь: http://dev.w3.org/html5/spec/association-of-controls-and-forms.html#plain-text-form-data .

В нижней части этого раздела говорится:

Полезная нагрузка с использованием текстового / обычного формата предназначена для чтения человеком. Они не надежно интерпретируются компьютером, так как формат неоднозначен (например, нет способа отличить литерал новой строки от значения новой строки в конце значения).

Поэтому неразумно, что PHP не пытается интерпретировать его и только делает его доступным в необработанном виде. Для меня это кажется правильным.