📅  最后修改于: 2023-12-03 15:14:52.535000             🧑  作者: Mango
enctype
介绍enctype
是在HTML表单提交时使用的属性,用于指定表单数据的编码类型。它告诉服务器以何种编码方式解析表单数据,常用于表单数据包含二进制数据的情况。
enctype
语法<form action="file.php" method="POST" enctype="enctype-type">
<!-- 表单元素 -->
</form>
enctype-type
的取值可以是以下三种:
application/x-www-form-urlencoded
:默认值。将表单数据编码成URL字符串。multipart/form-data
:将表单数据编码成多段消息。text/plain
:将表单数据编码成普通文本字符串,不对特殊字符进行编码。multipart/form-data
使用场景multipart/form-data
通常用于表单数据包含以下类型的数据时:
<input type="file" name="file">
元素。<input type="file" name="image">
元素。enctype
与服务器端解析根据不同的enctype
值,服务器端需要以不同的方式解析表单数据。
application/x-www-form-urlencoded
:表单数据会以名称/值对的形式编码,并按照key=value的格式合并为一个字符串,然后使用&
将每个键值对分隔。服务器端需要使用URL解码器将数据解码为原始格式。text/plain
:表单数据会用换行符分隔,其格式为“名称:值”。服务器端需要按照名称/值对的方式解析数据。multipart/form-data
:表单数据将被编码为多条消息,每条消息会以--
开头,后接一串随机字符串,然后是消息头,消息头有一个Content-Disposition属性,其值有两种:form-data和file。form-data表示普通数据,file表示文件数据。对于文件数据,消息头还包括文件名和文件类型等信息。服务器需要解析消息头,并将消息体中的数据根据消息头的Content-Disposition属性来处理。application/x-www-form-urlencoded
是默认的编码方式,不需要显式指定。multipart/form-data
编码时,表单数据会被分隔成多个消息,并在消息头中包含随机生成的字符串,因此消息头的大小会比较大,如果表单数据很大,会导致消息体的大小非常庞大,适合上传小文件或少量的数据。multipart/form-data
请求不能被缓存,因为每次表单提交时,消息头中的随机字符串都会变化,导致请求的内容不同。在表单中使用enctype
属性,使得表单可以提交二进制数据、文件数据等特殊类型的数据。不同的enctype
类型需要在服务器端以不同的方式解析,因此应该明确指定表单数据的编码方式。