当前位置: 首页 > 面试题库 >

method =“ post” enctype =“ text / plain”不兼容?

邵毅
2023-03-14
问题内容

当我使用

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

表单数据无法正确发送到proc.php文件。为什么?问题是什么?为什么我不能在post中使用文本/纯文本编码,但可以在get方法中使用它?


问题答案:

[修订]

答案是,因为PHP无法处理它(并且它不是bug):

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/plainenctype 可能会出错的示例:

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变量的值是什么。有可能

  • 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,但是第二个是唯一的明确解决方案。


 类似资料:
  • 请求类型:POST 标头: Content-Type:text/plain 下面是我尝试的,但我收到了400个坏请求 有人能帮助我如何传递cookie在头和原始文本在正文。

  • 我正在尝试遵循Jersey文档,以便在发生错误时启用非200响应(https://Jersey.java.net/documentation/latest/representations.html#D0E3586) 我的代码看起来像: 不幸的是,这会产生以下错误: [2015-02-01T16:13:02.157+0000][glassfish 4.1][严重][][org.glassfish.j

  • 问题内容: 我在使用Hibernate和PostgreSQL进行生产以及使用HSQLDB进行测试时遇到问题。 我正在使用自上而下的方法让Hibernate创建数据库架构。 我也在使用注释;hibernate.cfg.xml的映射部分仅包含诸如 Hibernate默认值之类的行,以将PostgreSQL上的String变量转换为character changes(255),这在某些情况下对我来说是不

  • 问题内容: 使用内容类型application / json通过文本/纯文本发送序列化为json的对象有什么性能优势?我知道许多框架(例如Spring)都可以根据内容类型映射和序列化数据,但是总的来说,我发现此过程非常简单,因此对于在JSON对象上使用application / json而不是text / plain的应用,这并不是一个令人信服的理由。 。 问题答案: 假设您正在谈论使用JSON与

  • 根据文档,响应自动作为JSON、XML或字符串对象提供,具体取决于响应内容。 在我的例子中,我的响应的内容类型为text/plain 这在我将字符串转换为响应,然后验证的地方工作(我已经逃过了所有的反斜杠) 这是失败的。当响应也可用作字符串时,为什么会失败 com.intuit.karate.exception.KarateExc0019:路径: $[*], 实际:["a. b. c匹配\"(\d

  • 我需要使用java应用程序设置剪贴板内容,以便用户可以使用两种MIME类型。这将允许用户粘贴他们想要的文本版本。 我发现了一个适用于JavaScript的例子,我希望有一个等效的Java。 JavaScript示例: 这基本上就是我在Java应用程序中拥有的: 我知道如何设置内容,可以是“text/plain”字符串,也可以是“text/html”字符串。上面的Java示例将在剪贴板中放置一个纯文