POST 文件上传 - multipart/form-data + PHP 中的 UTF 错误?
当我尝试使用带有 header Content-Type: multipart/form-data; 的 HTTP post 上传文件时boundary=-----NPRequestBoundary-----
一切都按预期工作,但尝试使用 Content-Type: multipart/form-data;边界=-----NPRequestBoundary-----; charset=UTF-8
导致 $_FILES 数组完全空白。
是 PHP 还是 Web 服务器的问题?据我所知,这种形式的 Content-Type
是有效的。
When I try to upload files using HTTP post with header Content-Type: multipart/form-data; boundary=-----NPRequestBoundary-----
everything works as expected but trying to use Content-Type: multipart/form-data; boundary=-----NPRequestBoundary-----; charset=UTF-8
cause completely blank $_FILES array.
Is it a problem with PHP or web server? As I know this form of Content-Type
is valid.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
因为
Content-Type
是multipart/form-data
,这意味着它是由多个部分组成的,每个部分都可以有自己的Content-Type
代码>. charset 参数仅与text/plain
内容类型一起使用。因此,对于multipart/form-data
内容类型来说,这是没有意义的。Because the
Content-Type
ismultipart/form-data
, this means it is built up from parts, and every part can have its ownContent-Type
. The charset parameter is only used withtext/plain
content-type. So it is meanless with amultipart/form-data
content-type.Bug 已在 SVN rev 中修复。 #316373(5.3.9 版本涵盖了它)。
Bug was fixed in SVN rev. #316373 (5.3.9 release covers it).
我找到了解决这个问题的肮脏方法。对我来说,它是 ofc 临时 bcs,它在 litespeed 下不起作用(我使用 apache 的反向代理来避免这个问题)。
<位置“/upload.php”>
RequestHeader设置Content-Type“multipart/form-data;boundary=-----NPRequestBoundary-----”
它将强制网络服务器替换内容类型标头。现在我确定 - 这是一个 PHP 错误(有人假设字符集将出现在
boundary=
之前)I've found dirty workaround for this problem. For me it's ofc temporary bcs it doesn't work under litespeed (I used reverse proxy to apache to avoid this problem).
<Location "/upload.php">
RequestHeader set Content-Type "multipart/form-data; boundary=-----NPRequestBoundary-----"
</Location>
It will force webserver to replace content-type header. For now I'm sure - this is a PHP bug (someone assumed that charset will occur before
boundary=
)