2

我有一个带有留言板的网站。该板允许人们发布消息并包含附件。每次有人用非 Unicode 字符写帖子时,我的网站都会出现问题。为了解决这个问题,我将我的 HTML 表单代码从

enctype="multipart/form-data"

(因为我接受文件上传)到:

enctype="multipart/form-data;charset=UTF-8"

这样就解决了人品问题。但它破坏了 Firefox 2 到 3.5 中的文件上传功能。Firefox 接受用户提交的所有文本,但不接受文件数据。它的行为完全像它应该的那样,但好像没有提交文件。在 Safari 中一切正常。

我也试过

enctype="multipart/form-data" accept-charset="UTF-8"

...但这对性格问题没有影响。

关于解决这个问题的任何想法?

4

2 回答 2

6

charset不是multipart/form-data媒体类型的注册参数。它不应该做任何事情。

根据RFC2388,提交字段的字符集实际上应该由浏览器在Content-Type表单数据子部分的标题中传递。实际上,没有浏览器会这样做。

accept-charset不能使用,因为它在 IE 中被破坏:它实际上指定了一个替代字符集,而不是选择提交的字符集,在每个字段的基础上,当字符不适合主字符集(这是当前页面)。这有效地破坏了您的字符串,因为您无法找出 IE 实际使用的字符集。

使浏览器以 UTF-8 格式提交表单的唯一有效方法是将包含表单的页面提供为 UTF-8,方法是设置Content-Type: text/html;charset=utf-8标头,包括<meta>HTTP 等效项,或两者兼有(如果用户保存到光盘的页面,丢失标题信息)。

于 2009-10-05T22:25:32.740 回答
5

问题不在于表单数据,而在于文件名字段 - 如果您需要文件数据,它根本不起作用utf-8,因此如果您需要在服务器上处理文件名,这很常见,那么您就搞砸了。

如果您enctype="multipart/form-data;charset=UTF-8"在表单中设置,Tomcat 6 会将其转换为: content type: application/x-www-form-urlencoded,这就是问题所在。

我花了很长时间才找到它,但它看起来一般都坏了,我已经用来自 Web 浏览器的 HTTP 请求和 .Net 进行了测试,效果相同。

于 2010-02-04T13:55:17.830 回答