2009-10-05 32 views
1

我有一個帶有留言板的網站。董事會讓人們發佈消息幷包含附件。每次有人用非Unicode字符編寫帖子時,我的網站都出現問題。在努力解決這個問題,我改變了我的HTML表單代碼HTML格式:在Firefox中結合charset和enctype的問題

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" 

...但是,對角色的問題沒有影響。

有關解決此問題的方法的任何想法?

回答

6

'charset'不是'multipart/form-data'媒體類型的註冊參數。它不應該做任何事情。

根據RFC2388,提交字段的字符集實際上應該由瀏覽器在form-data子部分的「Content-Type」頭中傳遞。在實踐中沒有瀏覽器這樣做。

'accept-charset'無法使用,因爲它在IE中被破壞:而不是選擇提交的字符集,它實際上指定了一個替代字符集使用,在每個字段的基礎上,當字符不適合主要字符集(這是當前頁面的字符集)。這有效地扭曲了你的字符串,因爲你無法找到IE實際使用的字符集。

使瀏覽器以UTF-8格式提交表單的唯一有效方法是通過設置'Content-Type:text/html; charset = utf-8'表頭來爲包含表單的頁面提供UTF-8服務,包括一個<meta>與http等效的文件,或兩者兼而有之(如果用戶將頁面保存到光盤,丟失標題信息,這可能是一個好主意)。

+0

嗯。不知道該告訴你什麼。 charset就像一個魅力。該頁面的頭部已經有。你在暗示別的嗎? – burton 2009-10-05 22:44:42

+0

如果您已將該元標記放入,您的表單將始終以UTF-8格式提交。如果您在提交中遇到了非ASCII的問題,那麼您需要在服務器端修復這個問題。多部分'charset'可能發生的事情是,你簡單地打破了'enctype',使Firefox忽略它,並提交表單作爲application/x-www-form-urlencoded來代替(因此文件上傳失蹤)。 – bobince 2009-10-05 22:57:31

+0

呃,如果這是一個指定字符集的真正的http頭*,那麼瀏覽器將會使用它並*忽略*你可能提供或不提供的任何meta html標籤。這讓很多人出門。元標記僅用於缺少http頭字符集聲明。 – goat 2012-05-09 23:50:29

4

這個問題不是數據文件,而是文件名字段 - 如果你需要utf-8和文件數據,這根本不起作用,所以如果你需要在服務器上處理文件名,這很常見,你是弄亂。如果你在表單中設置了enctype =「multipart/form-data; charset = UTF-8」,Tomcat 6將它轉換爲:內容類型:application/x-www-form-urlencoded,這是問題所在。

我花了很多時間去追蹤這個問題,但它看起來總體上已經壞了,而且我已經用Web瀏覽器和.Net的Http equests測試了這個功能,效果相同。