簡體   English   中英

如何強制瀏覽器在內容類型的http標頭中設置charset

[英]How to force browser to set charset in content-type http header

一個簡單的HTML文件:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form method="POST" action="test.jsp" accept-charset="utf-8" method="post" enctype="application/x-www-form-urlencoded" >
    <input type="text" name="P"/>
    <input type="submit" value="subMit"/>
</form>
</body>
</html>

HTML文件由服務器使用標題Content-Type:text/html; charset=utf-8 Content-Type:text/html; charset=utf-8 一切都說:“親愛的瀏覽器,當你發布這個表格,請發布utf-8編碼”。 瀏覽器實際上是這樣做的。 輸入字段中輸入的每個值都將采用UTF-8編碼。 但是瀏覽器不會告訴服務器這個! post請求的HTTP標頭將包含Content-Type:application/x-www-form-urlencoded字段,但字符集將被省略(使用FF3.6和IE8進行測試)。

問題是我使用的應用程序服務器(Tomcat6)期望Content-Type標頭中的字符集(如RFC2388中所述)。 像這樣: Content-Type:application/x-www-form-urlencoded;charset=utf-8 如果省略字符集,它將采用ISO-8859-1,而不是用於編碼的字符集。 結果是數據損壞。

是否有人知道如何強制當前瀏覽器將charset附加到Content-Type標頭?

是否有人知道如何強制當前瀏覽器將charset附加到Content-Type標頭?

不,沒有瀏覽器曾經使用application/x-www-form-urlencoded媒體類型提供了charset參數。 更重要的是,定義該類型的HTML規范沒有提出charset參數,因此服務器無法合理地期望得到一個。

(HTML4 確實期望為multipart/form-data提交的子multipart/form-data提供charset ,但即使在這種情況下,也沒有瀏覽器實際符合。)

接收字符集= “UTF-8”

在IE中, accept-charset已被破壞,不應使用。 對於作為UTF-8的頁面中的表單,它不會產生任何影響,但在其他情況下,它最終會產生不一致的結果。

不,使用表單你只需要以UTF-8的形式提供頁面,結果應該以UTF-8的形式返回(沒有識別標記告訴你(除了可能是_charset_ hack ,但是Tomcat沒有)不支持。

因此,如果您不希望它回退到默認值(通常是錯誤的),您必須告訴Servlet容器用於參數的編碼。 在一組有限的情況下,您可以調用ServletRequest.setCharacterEncoding()來執行此操作,但這往往很脆弱,並且對於從查詢字符串中獲取的參數根本不起作用。 遺憾的是,沒有標准化的Servlet級別修復。 對於Tomcat,您通常需要使用server.xml,而不是能夠在應用程序中修復它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM