formData引起的 \r\n问题

832 阅读1分钟

1.formData传参多问题换行问题

问题描述:

前端用formData上传图片和其它一些参数其中有textare,php限制textare长度1024,前端输入1024发现过不了php的长度检测。

问题诡异的地方是其它地方也有textare,却没有问题。

问题排查:

php的长度检测中一个回车键的长度是2,即\r\n。

通过一系列检测发现有问题的 ajax的content-type是multipart/form-data 正常的是application/x-www.form-urlencoded

application/x-www.form-urlencoded 窗体数据被编码为名称/值对。这是标准的编码格式,浏览器会对数据进行URL编码。php接收到数据后会对应解码。

multipart/form-data 窗体数据被编码为一条消息,页上的每个控件对应消息中的一个部分。而且multipart/form-data对数据格式要求非常严格,换行时必须使用\r\n,而不是\n。最终导致php长度检测失败。

建议使用FormData.append时放入的数据是 encodeURI()转码过的,后台根据 contennt-type来判断是否需要主动解码。

tips:某些低版本chrome multipart/form-data 换行没有转出\r\n 可能不会出问题