需要向服务器发送大量二进制数据或者包含非ASCII字符的文本时. application/x-www-form-urlenoded效率不高, 此时应该使用multipart/form-data
这是form提交时默认的content type, 编码规则如下:
+
代替%HH
格式, HH表示字符在ASCII中得编码CRLF
, 对应序列为%0D%0A
=
分隔; 名值对之间使用&
分隔表单提交时浏览器会自动根据表单数据进行转义然后发送到服务器.
application/x-ww-form-urlencoded
编码答: encodeURIComponment(), 但是encodeURIComponent有以下不满足要求的地方:
-
_
.
!
~
*
'
(
)
%20
替换空格而不是标准的+
可以在encodeURIComponent基础上进一步处理:
function encodeValue(val) {
encodedVal = encodeURIComponment(val);
encodedVal = encodedVal.replace(/[!'()*']/g, function (c) {
return '%' + c.charCodeAt(0).toString(16);
});
return encodedVal.replace(/\%20/g, '+');
}
还有就是有的浏览器textarea返回值没有正确使用CRLF
表示换行,需要进一步处理才能编码
value = textarea.value.replace(/\r?\n/g, '\r\n');