Когда я использую
<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 . Может быть
abc\r\ninput2=def , input2 = ghi , а также abc , input2 = def\r\ninput2=ghi Нет такой проблемы при использовании двух других кодировок, упомянутых ранее.
Разница между GET и POST:
enctype="text/plain" – он просто игнорируется браузером; вы можете протестировать его, используя Wireshark, чтобы обнюхать пакеты запросов), 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 не пытается интерпретировать его и только делает его доступным в необработанном виде. Для меня это кажется правильным.