html表单 传递 符号,HTML源码中 form 标签的 enctype 属性

定义:enctype 属性规定在发送到服务器之前应该如何对表单数据进行编码。默认地,表单数据会编码为 “application/x-www-form-urlencoded”。即在发送到服务器之前,所有字符都会进行编码(空格转换为 “+” 加号,特殊符号转换为 ASCII HEX 值)。

属性值:

c4b940308f2096e3eb44d436e3ad8aba.png

大家应该清楚在通过POST方式向服务器发送AJAX请求时,需要指定请求头Content-Type为application/x-www-form-urlencoded编码类型;表单上传文件时,需要指定请求头Content-Type为”multipart/form-data”;纯文本传输时,为防止接收数据时出现编码混乱,需要指定请求头Content-Type为”text/plain”。

以下为三者的区别:

> application/x-www-form-urlencoded

该属性值是通过表单发送数据时默认的编码类型,如果未在HTML的from标签中设置enctype属性,则默认值就是application/x-www-form-urlencoded。设置该属性值后,会将表单中发送的数据编码为“名称/值”对,这是标准的编码格式。当表单的Action为POST时,浏览器会将表单数据封装到http请求的body中,然后发送到服务器。当表单的Action为GET时,会将表单中发送的数据转换成一个字符串(name1=value1&name2=value2),然后把该字符串附加到URL后面,并用?分割,接着就请求这个新的URL。

> multipart/form-data

在向服务器发送大量的文本、包含非ASCII字符的文本或二进制数据时,“application/x-www-form-urlencoded”这种编码方式效率比较低。因此在文件上传时,所使用的编码类型是“multipart/form-data”,它既可以发送文本数据,也支持二进制数据上传。

浏览器端表单的Enctype属性值设置为multipart/form-data时,则表示传输的数据要用到多媒体传输协议,由于多媒体传输的都是大量的数据,所以规定上传文件必须是POST方法,的type属性必须是file。(表单里有图片上传也需要设置Enctype=”multipart/form-data”)。如下:

表单标签中设置enctype=”multipart/form-data”来确保匿名上载文件的正确编码。如下:

上传头像图片:td>td>

tr>

当表单中有file类型控件时,如果希望它能正常工作,则必须设置Enctype为”multipart/form-data”,此时浏览器会将整个表单以控件为单位分割,并为每个部分加上Content-Disposition(form-data或者file),Content-Type(默认为text/plain),name(控件name)等信息,并加上分割符(boundary)。

注:enctype=”multipart/form-data”是上传二进制数据; form里面的input的值以2进制的方式传过去。

form里面的input的值以2进制的方式传过去,所以request就得不到值了。 也就是说加了这段代码,用request就会传递不成功,取表单值加入数据库时,用到下面的:

//新建一个SmartUpload对象

SmartUpload su = new SmartUpload();

//取数组值

su.getRequest().getParameterValues();

//取单个参数单个值

su.getRequest().getParameter( );

> text/plain

数据以纯文本形式进行编码,其中不含任何控件或格式字符

> 关于”application/x-www-form-urlencoded”和”multipart/form-data”的消息区别

可以看下面的例子:

这是一个表单,有2个表单域:name和email

---------------------------------------------

| field value |

| name: ryan ou |

| email: ryan@rhythmtechnology.com |

---------------------------------------------

在 application/x-www-form-urlencoded 消息中:

//不同的field会用"&"符号连接;空格被替换成"+";field和value间用"="联系等等

name=ryan+ou&email=ryan@rhythmtechnology.com

在multipart/form-data 消息中:

//每个field被分成小部分,而且包含一个value是"form-data"的"Content-Disposition"的头部;一个"name"属性对应field的ID等等

-----------------------------7cd1d6371ec

Content-Disposition: form-data; name="name"

ryan ou

-----------------------------7cd1d6371ec

Content-Disposition: form-data; name="email"

ryan@rhythmtechnology.com

-----------------------------7cd1d6371ec

Content-Disposition: form-data; name="Logo"; filename="D:\My Documents\My Pictures\Logo.jpg"

Content-Type: image/jpeg

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值