我有一个带有留言板的网站。该板允许人们发布消息并包含附件。我遇到了一个问题,每当有人用非 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"
...但这对字符问题没有影响。
有什么办法解决这个问题吗?
最佳答案
charset
不是 multipart/form-data
的注册参数媒体类型。它不应该做任何事情。
根据 RFC2388
,提交字段的字符集实际上应该由浏览器在 Content-Type
中传递表单数据子部分的标题。实际上没有浏览器这样做。
accept-charset
不能使用,因为它在 IE 中被破坏了:当字符不适合主字符集(它是当前页面)。这实际上会破坏您的字符串,因为您无法找出 IE 实际使用的字符集。
让浏览器以 UTF-8 格式提交表单的唯一有效方法是将包含表单的页面设置为 UTF-8,方法是设置 Content-Type: text/html;charset=utf-8
header ,包括 <meta>
HTTP 等价物,或两者(如果用户将页面保存到光盘,丢失 header 信息,这可能是个好主意)。
关于HTML 表单 : issues combining charset with enctype in Firefox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1522620/