繁体   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