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 可能不会出问题