当我使用
时<form method="post" enctype="text/plain" action="proc.php">
表单数据无法正确发送到proc.php文件。为什么?问题是什么?为什么我不能在帖子中使用text / plain编码,但我可以将它与get方法一起使用?
答案 0 :(得分:23)
<强> [修订] 强>
答案是,因为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
还是{{1}发送},但第二个是唯一的非模糊解决方案。答案 1 :(得分:12)
HTML5确定了如何格式化在text/plain
提交的表单数据格式:https://w3c.github.io/html/sec-forms.html#plain-text-form-data。
在该部分的底部,它说:
使用text / plain格式的有效负载是人为的 可读。它们不能被计算机可靠地解释,因为 格式含糊不清(例如,没有办法区分a 文本换行值来自换行符中的换行值。
因此,PHP不会尝试解释它并且仅以原始形式提供它并不是不合理的。对我来说,这似乎是正确的方法。