转载请注明出处: http://qiudeqing.com/html5/2015/07/14/x-www-form-urlencoded-vs-form-data.html

需要向服务器发送大量二进制数据或者包含非ASCII字符的文本时. application/x-www-form-urlenoded效率不高, 此时应该使用multipart/form-data

application/x-www-form-urlencoded

这是form提交时默认的content type, 编码规则如下:

表单提交时浏览器会自动根据表单数据进行转义然后发送到服务器.

使用ajax向服务器传输数据时如何将数据进行application/x-ww-form-urlencoded编码

答: encodeURIComponment(), 但是encodeURIComponent有以下不满足要求的地方:

可以在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');